1. 리눅스, 유닉스에서는 모든 개체가 파일로 표시된다. 2. low level 시스템 콜 살펴보기 유닉스, 리눅스 환경에서는 모든 개체들이 파일로 되어있다. 가장 대표적인 것 : 디바이스 파일들 ex) /dev/tty, /dev/ttySO 시스템 정보들 ex) /proc/cpuinfo 실제로는 존재하지 않지만 리눅스 유닉스 체계에서는 파일로서 표시해준다. 파일 디스크립터 open("hello.txt", ) 오픈이라는 함수를 사용하면 파일 디스크립터라는것을 얻게 된다. write나 read와 같은 함수들은 이와 같은 파일 디스크립터를 가지고 동작하게 된다. 모든 파일을 사용할때에는 명시적으로 open을 사용해야 한다. 하지만 이미 open이 되어있어서 바로 사용 가능한 파일이 딱 세가지가 있다. 알아보자..
1Ø Name : n accessØ Synopsis : n #include n #include n int access(const char *pathname, int mode);Ø Description :n 호출 프로세스가 파일 경로에 접근 할수 있는지를 확인합니다. 파일 경로가 심볼릭 링크인경우, 역참조 됩니다.Ø Return value :n 정상적 수행시 0을 반환 하고, 에러시에는 -1을 반환한 뒤 errno가 알맞게 설정됩니다.2Ø Name : n fchdirØ Synopsis : n #include n int chdir(constd char *path);n int fchdir(int fd);Ø Description :n 호출 프로세스의 현재 작업 디렉토리를 경로에 지정된 디렉토리로 변경 합니다.Ø..
System call과 Function call의 차이점? 함수 호출은 하나의 프로세스 안에서 하나의 함수가 다른 함수를 호출하는 것이다. 모드 스위치가 발생하지 않는다. 시스템 호출은 한 프로세스 안에 함수가 OS 커널안에 있는 부분을 호출하는 것이다. 모드 스위치가 (사용자 -> 커널) 발생한다. 왜 OS를 통해서 접근할까? 사용자 모드에서는 하드웨어에 직접적으로 접근할 권한이 없기 때문이다. 시스템 콜할때 과정 1. 프로세스의 상태를 저장 2. 커널로 모드 스위치가 발생한다. 커널이 CPU를 사용 3. 커널에서는 전달받은 파라미터를 검사한다. 4. 실제적으로 시스템 콜에 해당하는 함수를 사용한다. 5. 커널의 상태를 저장한다. 6. 다시 Caller 프로세스로 전환하기 위해서 유저모드로 스위치를 한..
리눅스 프로그래밍이란? 리눅스에서 제공하는 다양한 서비스들을 이용해서 프로그래밍을 하는것 유닉스 /리눅스 커널이란? 하드웨어와 어플리케이션을 연결해주는 매개체 OS상 프로세스들의 중요한 자원들을 공유하게 할수있다. 여러 서비스(시스템 콜)을 제공한다. 주변장치들을 다룬다. - 처음에 램에 탑재가 된후 시스템이 shut down할때까지 램에 남아있는다. - 메모리 관리 , 프로세스 관리 , 프로세스간의 통신 , I/O 관리 , 파일 관리를 제공한다. 리눅스의 구조 어플리케이션이 하드웨어에 직접적으로 접근하지 않고 OS/커널을 통해서 접근한다. 이유는? APP이 여러개가 있는데 HW를 동시에 접근할때에는 어떠한 조절이 필요하기 때문이다. 커널도 두계층으로 나눈다. - Machine - dependent : ..
라우터란? 서로 구조가 다른 망을 연결할 수 있어 근거리 통신망(LAN)과 대도시 통신망(MAN), 광대역 통신망(WAN)을 연결하는데 사용된다. IP주소를 활용하여 리소스가 리시버까지 갈수 있는 경로를 파악하고 효율적인 경로를 채택하는 라우팅 기능을 수행한다. 회선 교환 네트워크의 장단점 장점 : 음성 데이터를 송수신하는 과정에서 네트워크의 지연이 발생하지 않는다. 단점 : 음성 데이터를 송수신하기 위하여 전용 채널을 할당하므로 실제로 음성 데이터가 없는 경우 채널이 낭비 될 수가 있다. 장점 : 각 교환기에서 통신 채널을 점유하는 방식이 아니므로 통신 채널의 효율적인 공유가 가능 특정 패킷을 여러 목적지로 동시에 전송 할 수 있다. 오류 제어 및 흐름 제어를 통해 정확한 데이터 전송 가능 단점 : 송..
- Branching 우리가 개발하는 소프트웨어의 메인라인에서 벗어나서 다른방향으로 개발해 보고 싶을때가 있다. 이런것을 branching 이라 한다. - Merging branching을 했다가 나중에 결과물을 메인 라인에 합치는 과정 동시에 여러가지 일들을 진행시킬수 있기에 위에 둘을 수행한다. Branches Illustrated repository에 A라는 repository copy가 있고, master 라는 default branch가 있다. 또다른 변화를 가하고 commit을 하는 반복적인 작업을 수행하면 master는 가장 최근의 C를 가리키게 된다. $git checkout -b bug123 bug123 이라는 branch로 기존의 master를 checkout 하겠다라는 명령어 이렇게 ..
GIT 의 장점 : - 기존의 버전관리 시스템들과는 달리 처리 속도가 빠르다. - 심플한 디지인이다. - 순서대로 개발하는것이 아닌 각각의 파트를 여러명이 동시에 개발한다. - 리눅스 커널 처럼 굉장히 큰 규모의 소프트웨어 프로젝트도 아주 쉽고 빠르게 관리한다. 파일 A에 변형이 가해지게 되면 변경된 부분만 저장이 된다. 대부분의 파일들이 변경된 사항들만 저장하게 된다. 최종적으로 생성된 버전을 쓰고싶다면 원본에서 변경된 사항들을 모두 처리한 분을 적용시켜서 최종적으로 생성해야된다는 오버헤드가 발생한다. 그렇지만, GIT는 A가 변경이 되었다 하면 변경된 그 자체 파일을 저장한다. 변경이 일어난 파일들만 저장이 이루어진다. 그래서 빠른 처리가 가능하다. 실제로 파일의 크기 하나하나가 크지 않기 때문에 메..
혼자 개발할 때... 다음과 같은 상황이 발생했던 적이 있는가? - 잘 작동하지 않는 코드가 있음, 코드에 여러가지 변경을 한 후에 저장함, 새로운 변경 때문에 코드가 정상 작동하지 않는다.!! (이전 코드로 돌아가고 싶을때) - 실수로 중요한 파일을 삭제함, 몇 달 동안 작업한 수만 라인의 코드가 허공으로 사라짐 - 하드 디스크가 고장!!, 과제 마감에 임박하여 모든 것이 다 날라감 이런 경우 대비하여 어떻게 하나요? usb를 이용하여 정기적 백업 - 백업하는것을 까먹을수도 있다. 함께 개발할 때... - 누구의 컴퓨터에 프로젝트의"공식적"인 소스코드를 보관하지? - 어떤 팀원이 어떤 부분을 작업하고 수정했는지 어떻게 알 수 있지? - 다른 팀원이 소스코드에 가한 변경을 어떻게 읽고 쓸 수 있을까? 이..