《Unix环境高级编程》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu10.04上测试通过。
程序简介:这个程序的第一个参数指定了文件描述符,并打印出这个文件的文件标志说明。
//《Unix环境高级编程》程序3-4:打印指定的描述符的文件标志 #include <stdio.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char **argv) { int val; if( argc != 2 ) { fprintf(stderr, "Usage: a.out <descriptor#>"); exit(1); } //改变已打开的文件的性质 val = fcntl( atoi(argv[1]), F_GETFL, 0); if( val < 0 ) { fprintf(stderr, "fcntl error for fd %d", atoi(argv[1])); exit(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: fprintf(stderr, "unknow access mode"); exit(1); } if( val & O_APPEND ) printf(", append"); if( val & O_NONBLOCK ) printf(", nonblocking"); #if defined(O_SYNC) if( val & O_SYNC ) printf(", synchronous writes"); #endif #if !defined(_POSIX_C_SOURCE) && defined(O_FSYNC) if( val & O_FSYNC ) printf(", synchronous writes"); #endif putchar('\n'); return 0; }