Advanced Programming in UNIX Environment Episode 14
来源:互联网 发布:淘宝怎么赚集分宝 编辑:程序博客网 时间:2024/05/20 03:08
#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,F_GETFL,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都要等待,直至数据已写到磁盘上再返回。
ioctl函数一直是I/O操作的杂货箱。终端I/O是使用ioctl最多的地方。
#include <unistd.h>#include <sys/ioctl.h>int ioctl(int fd, int request, ...);
对于ISO C原型,他用省略号表示其余参数。但是,通常只有另外一个参数,他常常是指向一个变量或结构的指针。
在此原型中,表示的只是ioctl函数本身所要求的头文件。通常,还要求另外的设备专用头文件。终端I/O的命令都需要头文件
fd=open("dev/fd/0",mode);
大多数系统忽略它所指定的mode,而另外一些系统则要求mode必须是所引用的文件(在这里是标准输入)初始打开时所使用的打开模式的一个子集。
阅读全文
0 0
- Advanced Programming in UNIX Environment Episode 14
- Advanced Programming in Unix Environment Episode 1
- Advanced Programming in Unix Environment Episode 2
- Advanced Programming in UNIX Environment Episode 3
- Advanced Programming in UNIX Environment Episode 4
- Advanced Programming in UNIX Environment Episode 5
- Advanced Programming in UNIX Environment Episode 6
- Advanced Programming in UNIX Environment Episode 7
- Advanced Programming in UNIX Environment Episode 8
- Advanced Programming in UNIX Environment Episode 9
- Advanced Programming in UNIX Environment Episode 10
- Advanced Programming in UNIX Environment Episode 11
- Advanced Programming in UNIX Environment Episode 12
- Advanced Programming in UNIX Environment Episode 13
- Advanced Programming in UNIX Environment Episode 15
- Advanced Programming in UNIX Environment Episode 16
- Advanced Programming in UNIX Environment Episode 17
- Advanced Programming in UNIX Environment Episode 18
- python的dataframe转换为多维矩阵
- Conda虚拟环境
- BitmapFactory Decode大小的时候需要获取所有的流文件吗?
- TensorFlow中global_step的简单分析
- ES6之Symbol
- Advanced Programming in UNIX Environment Episode 14
- 6.3
- HDFS文件
- 摧毁数组
- 摩尔定律对IT未来发展的影响
- ArrayList 的实现分析
- 那些年在Opencv遇到过的Mat坑
- CSS中上下左右提示框主要代码
- linux中的系统恢复