原型:
#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );
功能: 改变已经打开文件的性质
常见使用方式:
int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock*lock);
*复制一个已有的文件描述符,新文件描述符作为函数返回值(cmd=F_DUPFD)
*获得/设置文件描述符标志(cmd=F_GETFD或F_SETFD)
*获得/设置文件状态标志(cmd=F_GETFL或F_SETFL)
通过第三个参数来设置
可以更改的几个标志是:O_APPEND、O_NONBLOCK、SYNC、O_ASYNC,
而O_RDONLY、O_WRONLY、O_RDWR不适用(只读状态标志、只写状态标志、读写状态标志,不可以更改,这些只能是在文件打开的时候设置的哦!)
*获得/设置文件锁(cmd=F_SETLK、cmd=F_GETLK、F_SETLKW)
文件状态标志设置案例
void set_fl(int fd, int flag){
int val = fcntl(fd, F_GETFL);
val |= flag;
if( fcntl(fd, F_SETFL, val) <0 ){
fprintf(stderr, "fcntl error:%s \n ", strerror(errno));
}
}
void clr_fl(int fd, int flag){
int val = fcntl(fd, F_GETFL);
val &= ~flag;
if( fcntl(fd, F_SETFL, val) <0 ){
fprintf(stderr, "fcntl error:%s \n ", strerror(errno));
}
}
.