오류 처리에 대한 의견: open() 또는 read() 또는 write()에 대한 두 번째 호출에서 문제가 발생하면 예제가 파일을 제대로 닫지 않고 반환합니다. 일반적인 실수 (그리고 나는 이것이 단지 예일 뿐이라는 것을 깨닫습니다),하지만 여전히 머피의 법칙이 적용됩니다. 파일이 부속 모드에서 열립니다. 각 쓰기 전에 파일 포인터는 lseek와 마찬가지로 파일 끝에 배치됩니다. O_APPEND는 두 개 이상의 프로세스가 한 번에 파일에 데이터를 추가하면 NFS 파일 시스템에서 손상된 파일로 이어질 수 있습니다. 이는 NFS가 파일에 추가하는 것을 지원하지 않으므로 클라이언트 커널은 이를 시뮬레이션해야 하므로 경합 조건 없이는 수행할 수 없습니다. open() 호출은 새 열린 파일 설명, 시스템 전체의 열려 있는 파일 테이블의 항목을 만듭니다. 이 항목은 파일 오프셋 및 파일 상태 플래그를 기록합니다(fcntl() F_SETFL 작업을 통해 수정 가능). 파일 설명자는 이러한 항목 중 하나에 대한 참조입니다. 경로 이름이 나중에 제거되거나 다른 파일을 참조하도록 수정된 경우 이 참조는 영향을 받지 않습니다. 새 열린 파일 설명은 처음에는 다른 프로세스와 공유되지 않지만 fork(2)를 통해 공유가 발생할 수 있습니다.

일반적으로 open() 함수는 경로가 기호 링크의 이름을 지정하는 경우 기호 링크를 따릅니다. 그러나 Open() 함수는 O_CREAT 및 O_EXCL을 사용하여 호출할 때 기호 링크가 존재하지 않는 파일을 참조하더라도 경로이름이 기존 기호 링크인 경우 [EEXIST]로 실패해야 합니다. 권한 있는 응용 프로그램이 기호 링크로 인해 다른 위치에 파일을 만들 수 있는 가능성 없이 알려진 위치에 새 파일을 만들 수 있도록 이 동작이 필요합니다. 경로 이름이 기호 링크인 경우 open이 실패합니다. 이것은 FreeBSD 확장, 버전에서 리눅스에 추가 된 2.1.126. 경로 이름의 이전 구성 요소의 기호 링크는 계속 따라다닌다. glibc 2.0.100 이상의 헤더에는 이 플래그의 정의가 포함됩니다. 2.1.126 이전의 커널은 사용하는 경우 이를 무시합니다.

다음 예제에서는 쓰기용 파일을 열어 파일이 아직 없는 경우 파일을 만듭니다. 파일이 있는 경우 시스템은 파일을 0바이트로 트렁크합니다. 이러한 선택적 플래그 중 일부는 파일을 연 후 fcntl을 사용하여 변경할 수 있습니다. open() 시스템 호출 linux 명령은 경로 이름을 파일 설명자로 변환하는 데 사용됩니다(읽기, 쓰기 등과 같이 후속 I/O에서 사용할 수 있는 작고 음수가 아닌 정수). 호출이 성공하면 파일 설명자가 반환된 wil은 프로세스에 대해 현재 열려 있지 않은 가장 낮은 파일 설명자입니다. 이 호출은 다른 프로세스와 공유되지 않는 새 열린 파일을 만듭니다. (그러나 공유 열린 파일은 fork(2) 시스템 호출을 통해 발생할 수 있습니다.) 새 파일 설명자는 exec 함수 에서 열린 상태로 유지하도록 설정되어 있습니다(fcntl(2) 참조). 파일 오프셋은 파일의 시작 부분으로 설정됩니다. 동기 I/O에 대해 파일이 열립니다. 결과 파일 설명자의 모든 쓰기는 데이터가 기본 하드웨어에 물리적으로 기록될 때까지 호출 프로세스를 차단합니다. 하지만 아래 제한 사항을 참조하십시오. 이제 코드를 트로프하고 까다로운 부분을 설명 할 수 있습니다.

가장 먼저 해야 할 일은 필요한 헤더 파일을 포함하는 것입니다. 모든 시스템 호출의 맨 페이지에서는 이 시스템 호출을 사용하기 위해 포함해야 하는 헤더 파일을 알려줍니다. 둘째, 버퍼의 크기를 바이트로 정의하는 데 사용할 상수를 정의합니다. 버퍼 크기가 작을수록 복사 프로세스가 길어지지만 메모리가 절약됩니다. 다음으로 우리는 오픈 소스 및 대상 파일 설명자, O_RDONLY와 소스는 O_WRONLY와 만 읽을 수 있도록, O_WRONLY와 대상 | O_CREAT는 쓰기 를 확인하고 0644 파일 시스템 권한 플래그와 대상 파일을 만들 수 있습니다. 오류의 경우 우리는 상대적으로 사용자 친화적 인 오류 메시지를 인쇄 하는 perror() 남자 3 perror를 사용 합니다. open() 함수는 해당 프로세스에 대해 현재 열려 있지 않은 가장 낮은 파일 설명자인 명명된 파일에 대한 파일 설명자()를 반환해야 합니다.