리눅스시스템프로그래밍

리눅스 시스템 프로그래밍 챕터 1

이번에 정리한 책은 리눅스 시스템 프로그래밍 입니다

http://www.yes24.com/24/Goods/15581782?Acode=101

기초부터 고급까지 정말 자세하게 나와있습니다. 꼭 사서 보시길 추천드립니다

ch1. 시스템 프로그래밍을 배워야 하는 이유

시스템 프로그래밍의 주춧돌

1. 시스템 콜

2. C 라이브러리

3. C 컴파일러

API와 ABI

서로 다른 컴퓨터 소프트웨어 간에 인터페이스를 정의하고 기술

API

소스코드 레벨에서 서로 인터페이스가 연결되는 방식. 양쪽 모두 지킬 경우에만 동작 (C API)

ABI

특정 아키텍쳐간에 동작하는 바이너리 인터페이스를 정의, 애플리케이션과 라이브리간, 애플리케이션과 애플리케이션, 애플리케이션과 커널과의 상호동작.

콜링컨벤션, 바이트 순서, 레지스터 활용, 시스템 콜 실행, 라이브러리 링크 등과 같은 방식 정의

리눅스 아키텍쳐마다 고유의 ABI가 있음

표준

리눅스 프로그래밍의 개념

파일과 파일시스템

리눅스에서는 모든것이 파일.

일반 파일

디렉터리와 링크

하드링크

다중링크는 동일한 inode에 대한 여러가지 이름을 맵핑. 파일을 삭제할때 모든 inode의 하드링크를 삭제해아하므로 파일시스템 내부에 링크카운터를 두어 링크개수를 추적함.

심볼릭 링크.

하드링크의 경우 inode가 속한 파일시스템 외부에서는 inode 번호가 무의미 하기 때문에 덜 투명한 심볼릭 링크를 제공함. 링크를 연결할 파일의 완전한 경로이름을 포함하는 독자적인 inode와 데이터가 담겨있음

특수 파일

하드웨어 장치에 대한 접근을 읽고 쓰는 방식으로 허용

파일시스템과 네임스페이스

프로세스

스레드

프로세스의 계층구조

각 프로세스는 pid라는 고유한 양수 값으로 구분. 프로세스 트리라는 엄격한 계층 구조를 형성 init프로그램이 첫번째 프로세스 루트 프로세스는 fork()라는 시스템 콜로 만들어짐. 프로세스가 고아가되면 init에 입양시킴 자식 프로세스가 종료되면 부모프로세스가 기다리는지를 보고 완전히 종료시킴.

사용자와 그룹

uid는 사용자를 나타내는 개념 uid 0 (root)는 특별한 관한.

모든 사용자는 하나이상의 그룹에 속해있음 (/etc/passwd, etc/group)

권한

400 - 소유자읽기 200 - 소유자 쓰기 100 - 소유자 실행 040 - 그룹읽기 020 - 그룹 쓰기 010 - 그룹 실행 004 - 그 외 사용자 읽기 002 - 그 외 사용자 쓰기 001 - 그 외 사용자 시행

시그널

리눅스에 특정한 사건이 발생했음을 알려줌 ( 약 30개정도의 시그널이 있음) 프로세스를 종료하고 멈추게하는 등등의 시그널이 있음.

에러처리

시스템 프로그래밍에서 에러는 함수 리턴 값으로 확인이 가능하며 errno라는 특수한 변수로 구체적인 이유를 알 수 있음. 직접 읽고 쓸 수 있으며 변경 가능한 변수.

blog comments powered by Disqus