《UNIX环境高级编程》笔记--fcntl函数
fcntl函数可以改变或者查看已打开文件的性质。该函数的定义如下:
#include <stdio.h>#include <fcntl.h>int main(void){ int result = 0; int fd = -1, val; if((fd = open("a.txt", O_RDWR|O_APPEND))<0){ perror("open"); result = -1; goto FINALLY; } if((val = fcntl(fd,F_GETFL))<0){ perror("fcntl"); result = -1; goto FINALLY; } switch(val & O_ACCMODE){ case O_RDONLY: printf("read only"); break; case O_WRONLY: printf("write only"); break; case O_RDWR: printf("read write"); break; default: printf("unknown access mode"); break; } if(val & O_APPEND){ printf(",append"); }else if(val & O_NONBLOCK){ printf(",nonblock"); } printf("\n");FINALLY: if(fd >= 0){ close(fd); } return result;}运行结果:read write,append
F_SETFL和F_SETFD的使用方法差不多,先F_GETFL文件状态,然后使用|=设置想要的状态,最后再F_SETFL设置回去。
F_GETOWN:取当前接受SIGIO和SIGURG信号的进程ID和进程组ID。这两种信号会在以后介绍异步IO时说明。
F_SETOWN:设置接受SIGIO和SIGURG信号的进程ID和进程组ID。正的arg指定一个进程ID,负的arg表示等于arg绝对值
的一个进程组ID。