임 (하지만 문제는 일반적인 파일을 주로)하고 다음 줄개방형 시스템 호출
fd = open(path,0);
작업을하지만, 다음 줄에 실패있어 장치 파일을 열려고 난 그냥 그 작업을 대신 플래그의 공을 퍼 팅 이유의 의미가 무엇인지 이해 해달라고 (심지어 모드 0777없이)
fd = open(path,O_RDONLY,0777)
.
임 (하지만 문제는 일반적인 파일을 주로)하고 다음 줄개방형 시스템 호출
fd = open(path,0);
작업을하지만, 다음 줄에 실패있어 장치 파일을 열려고 난 그냥 그 작업을 대신 플래그의 공을 퍼 팅 이유의 의미가 무엇인지 이해 해달라고 (심지어 모드 0777없이)
fd = open(path,O_RDONLY,0777)
.
The POSIX specifications for open()
이 필요로 정의 된 상수 O_EXEC
, O_RDONLY
는, O_WRONLY
, O_RDWR
, 또는 O_SEARCH
이 플래그에 포함 할 수 있지만,이 값을이 상수의를 지정하지 않은 정확하게 하나. 사실 그들은 이론적 근거에서 "역사적인 구현에서 O_RDONLY
값은 0입니다." 이러한 구현에서 플래그를 0으로 지정하는 것은 O_RDONLY
만 지정하는 것과 같습니다.
POSIX의 "historical"용어 사용은 O_RDONLY
의 값이 0 인 경우가 드물다고 제안해서는 안됩니다. 반대로 현재의 구현에서는 꽤 일반적입니다. 그럼에도 불구하고 O_RDONLY
을 의미 할 때 플래그를 0으로 지정하면 플래그 상수의 정의가 다른 시스템에서 코드가 손상 될 수 있습니다.
플래그가 0으로 지정되었지만 플래그가 O_RDONLY
(의심 스러울 수 있음)이 아닌 실제로 열 수있는 경우 O_RDONLY
의 값은 구현시 0이 아닌 값이어야합니다. 그런 다음 필수 상수 그룹의 다른 멤버 중 하나가 값 0을 갖고 해당 모드에서 대상 파일을 열 수 있습니다 (예 : 경로가 디렉토리를 지정하고 값이 0 일인 O_SEARCH
). 그렇지 않으면 정의되지 않은 동작이 open()
에서 발생합니다. UB는 오류 표시기를 반환하는 것으로 나타낼 필요가 없으며 그렇게하지 않으면 발생하지 않으면 아무 것도 알려주지 않습니다.
부록은 : open(path, O_RDONLY)
, perror()
를 통해 진단을 인쇄하여, 더 나은 errno
, 또는를 검사하여 오류의 원인을 조사 할 가치가있을 것입니다 (-1 반환하여 표시) 당신을 위해 실패 주어진.