#include "apue.h"
#include <fcntl.h>
int main(int argc,char *argv[])
{
int val;
if(argc!=2)
{
err_quit("usage: a.out <descriptor#>");
}
if((val=fcntl(atoi(argv[1]),F_GETFL,0))<0)
{
err_sys("fcntl error for fd %d",atoi(argv[1]));
}
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:
err_dump("unknown access mode");
}
if(val&O_APPEND)
{
printf(",append");
}
if(val&O_NONBLOCK)
{
printf(",nonblocking");
}
if(val&O_SYNC)
{
printf(",synchronous writes");
}
#if !define(_POSIX_C_SOURCE)&&defined(O_FSYNC)&&(O_FSYNC!=O_SYNC)
if(val&O_FSYNC)
{
printf(",synchronous writes");
}
#endif
putchar("\n");
return 0;
}
对于指定文件描述符打印文件标志
#include "apue.h"
#include <fcntl.h>
void set_fl(int fd,int flags)
{
int val;
if((val=fcntl(fd,0))<0)
{
err_sys("fcntl F_GETFL error");
}
val|=flags;
if(fcntl(fd,F_SETFL,val)<0)
{
err_sys("fcntl F_SETFL error");
}
}
对一个文件描述符开启一个或多个文件状态标志
中间一条语句改为:
val&=~flags;
就构成另一个函数,我们成为clr_fl。此语句是当前文件状态标志值val与flags的反码进行逻辑“与”运算。
在开始处加上一句以调用set_fl,则开启了同步写标志。
set_fl(STDOUT_FILENO,O_SYNC);
这就使每次write都要等待,直至数据已写到磁盘上再返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。