Linux2010. 3. 31. 11:38
fileno() 는 fp를 fd로 변환해주고
fdopen()은 fd를 fp로 변환해준다.

int fileno(FILE *stream);
FILE *fdopen(int fildes, const char *mode);

[링크 : http://linux.die.net/man/3/fileno]
[링크 : http://linux.die.net/man/3/fdopen]

아무튼 원하는 파일이나, stdin/out/err에 대한 fd를 얻어온뒤
fcntl() 함수를 이용하여 변경하면 된다.

fctnl(fd, F_SETFL, O_NONBLOCK);
(테스트 안해봣음!)

int fcntl(int fd, int cmd, long arg);

F_SETFL
    Set the file status flags to the value specified by arg. File access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation flags (i.e., O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC) in arg are ignored. On Linux this command can only change the O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK flags.

[링크 : http://linux.die.net/man/2/fcntl]
[링 크 : http://www.falinux.com/win/study/06/devicedriver11.html]

Posted by 구차니