《Unix环境高级编程》:打印指定的描述符的文件标志

来源:互联网 发布:windows安全配置 编辑:程序博客网 时间:2024/06/06 00:51

《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;  }