Advanced Programming in UNIX Environment Episode 14
发布时间:2020-12-15 09:18:33 所属栏目:安全 来源:网络整理
导读:#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 ]))
#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(STDOUT_FILENO,O_SYNC);
这就使每次write都要等待,直至数据已写到磁盘上再返回。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |