리눅스 시스템 프로그래밍 예제

이 파일은 Linux에서 가장 기본적이고 기본적인 추상화입니다. 리눅스는 모든 것을 따릅니다 -이 – 파일 철학 (계획 9과 같은 다른 시스템만큼 엄격하지는 않지만). [2] 따라서 문제의 객체가 일반 파일이라고 생각하지 않는 경우에도 파일을 읽고 쓰는 것을 통해 많은 상호 작용이 발생합니다. 마찬가지로 파일 시스템에서 논리적으로 주소를 지정할 수 있는 가장 작은 단위는 블록입니다. 블록은 파일 시스템이 있는 물리적 미디어가 아니라 파일 시스템의 추상화입니다. 블록은 일반적으로 섹터 크기의 두 배수의 힘입니다. Linux에서 블록은 일반적으로 섹터보다 크지만 페이지 크기(메모리 관리 단위에서 해결할 수 있는 가장 작은 단위, 하드웨어 구성 요소)보다 작아야 합니다. [4] 일반적인 블록 크기는 512바이트, 1킬로바이트 및 4킬로바이트입니다. 컴파일러는 C 표준(C 언어 표준 참조)과 시스템 ABI(API 및 ABI 참조)를 구현하는 데 도움이 되기 때문에 유닉스 시스템에 사용되는 컴파일러(Linux 포함)는 시스템 프로그래밍과 매우 관련이 있습니다.

Linux는 대부분의 다른 운영 체제 커널보다 훨씬 적은 수의 시스템 호출을 구현합니다. 예를 들어 x86-64 아키텍처의 시스템 호출 수는 Microsoft Windows에서 수천 건의 시스템 호출이 의심되는 것과 비교하여 약 300개로 제공됩니다. Linux 커널에서 각 컴퓨터 아키텍처(예: 알파, x86-64 또는 PowerPC)는 표준 시스템 호출을 자체적으로 보강할 수 있습니다. 따라서 한 아키텍처에서 사용할 수 있는 시스템 호출은 다른 아키텍처에서 사용할 수 있는 것과 다를 수 있습니다. 그럼에도 불구하고 90% 이상의 시스템 호출의 매우 큰 하위 집합은 모든 아키텍처에서 구현됩니다. 이 책에서 다루는 것은 이 공유 하위 집합, 이러한 공통 인터페이스입니다. 프로그램을 개발하는 동안 프로그래머는 코드가 복잡하지 않아야하는 것과 같은 몇 가지 사항을 염두에 두어야합니다. 따라서 좋은 코드를 생성하기 위해 프로그래머가 따라야 하는 몇 가지 좋은 방법이 있음을 알 수 있습니다. 이 문서에서는 Linux의 시스템 호출을 작업하는 동안 프로그래머가 따라야 하는 몇 가지 모범 사례에 대해 중점합니다. 프로세스가 정보를 교환하고 서로 이벤트를 알릴 수 있도록 허용하는 것은 운영 체제의 가장 중요한 작업 중 하나입니다. Linux 커널은 시스템 V와 POSIX모두에 의해 정의되고 표준화된 메커니즘을 비롯하여 대부분의 역사적인 유닉스 IPC 메커니즘을 구현하고 자체 메커니즘 또는 두 개를 구현합니다. 파일은 일반적으로 파일 이름을 통해 액세스되지만 실제로는 이러한 이름과 직접 연결되지 않습니다.

대신 파일은 inode(원래 정보 노드의 경우 짧은 값)에 의해 참조되며, 파일 시스템에 고유한 정수 값을 할당합니다(전체 시스템에서 반드시 고유하지는 않음). 이 값을 inode 번호라고 하며 종종 i-number 또는 ino로 축약됩니다. inode는 수정 타임스탬프, 소유자, 유형, 길이 및 파일 데이터의 위치와 같은 파일과 관련된 메타데이터를 저장하지만 파일 이름은 저장되지 않습니다. inode는 유닉스 스타일 파일 시스템의 디스크에 있는 물리적 개체와 Linux 커널의 데이터 구조로 표시되는 개념적 엔터티입니다. Linux의 표준 파일 권한 및 보안 메커니즘은 역사적인 유닉스의 메커니즘과 동일합니다. VisheshPatel/Linux-시스템 프로그래밍에서 새로운 릴리스에 대한 알림을 원하십니까? C++ 프로그래밍은 표준 C++ 라이브러리와 GNU C++ 컴파일러라는 두 가지 초석을 시스템 프로그래밍 기반에 추가합니다. 표준 C++ 라이브러리는 C++ 시스템 인터페이스와 ISO C++11 표준을 구현합니다. 그것은 libstdc ++ 라이브러리 (때로는 작성 된 libstdcxx)에 의해 제공됩니다. GNU C++ 컴파일러는 Linux 시스템의 C++ 코드에 대한 표준 컴파일러입니다. g++ 바이너리로 제공됩니다.

앞서 언급했듯이 Linux는 POSIX 및 SUS 규정 준수를 목표로 합니다.