나는 코드 줄이 무엇을 의미하는지 이해하려고 노력하고 있어요 :fcntl()을 호출하는 목적은 파일 기술자를 -1, cmd를 F_GETFL로 호출하는 것입니다.
flags = fcntl(-1,F_GETFL,0);
나는 코드 줄이 무엇을 의미하는지 이해하려고 노력하고 있어요 :fcntl()을 호출하는 목적은 파일 기술자를 -1, cmd를 F_GETFL로 호출하는 것입니다.
flags = fcntl(-1,F_GETFL,0);
fcntl()
기능이 열려 기술자에 다양한 작업을 수행합니다. 그것의 구문은 다음과 같습니다
-1
다음 fcntl()
실패했습니다 : int fcntl(int descriptor,
int command,
...)
에 대한 반환 값를 참조하십시오. errno 글로 z 변수는 오류를 나타내도록 설정됩니다.
이 코드 :
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int main(){
int flags;
if((flags = fcntl(-1,F_GETFL,0)) < 0){
perror("fcntl: ");
}
printf("\n %d\n", flags);
}
출력은 다음과 같습니다 fcntl(-1,F_GETFL,0);
때문에 -1
의 성공하지 전화를 나타내는 인쇄 flags
값이 -1
입니다
~$ gcc xx.c
~$ ./a.out
fcntl: : Bad file descriptor
-1
주의가 유효한 파일 기술자가 아니다. valid file descriptors은 0
부터 시작합니다. (즉, perror()
은 오류 메시지 Bad file descriptor, EBADF를 출력합니다)
참고 :이 코드는 Linux 시스템에서 실행됩니다.
편집 : F_GETFL
는 GET 플래그입니다은 fcntl을에서() 명령.
F_GETFL
플래그 fcntl()
을 호출하는 일반적인 이유는 플래그를 수정하고 fcntl()
및 F_SETFL
로 설정하는 것입니다; fcntl()
을 F_GETFL
으로 호출하는 또 다른 이유는 파일 설명 자의 특성을 찾는 것입니다. <fcntl.h>
에 대한 정보를 (신중하게) 읽음으로써 조작 할 수있는 플래그에 대한 정보를 찾을 수 있습니다. 플래그는 다음을 포함합니다 :
플러스 (POSIX 2008)를 구별 할 수 있습니다 O_ACCMODE O_RDONLY
, O_RDWR
및 O_WRONLY
, 내가 제대로 참조 된 페이지를 읽고 있어요 경우.
그러나 fcntl()
을 -1
과 같이 명확하게 잘못된 파일 설명자와 함께 호출하는 것은 의미가 없습니다. 함수가 실패를 나타내는 -1
을 반환하고 errno
을 EBADF
(잘못된 파일 설명자)으로 설정하면됩니다.
flags = fcntl(-1,F_GETFL,0);
시도가 유효하지 않은 파일 기술자 (-1
)에 대한 몇 가지 작업을 수행 할 수 있으므로 다른 어떤하지만 -1
반환을하지 않고 errno
을 설정 않을 것입니다 : 우리 가정
은 man 2 fcntl
에 의해 기술 된 기능에 대해 얘기 EBADF
.
난 당신이 savely하여이 줄을 바꿀 수 있습니다 말하고 싶지만 : 그래서 코드의 목적은 아무것도 없지만 -1`가 유효한 파일 기술자 : 아니다`보여줍니다
flags = -1; errno = EBADF;
를, 내가 알고하자 이것에 대해 더 많은 도움이 필요합니다. –