1 /* 2 ============================================================================ 3 Name : test.c 4 Author : blank 5 Version : 6 Copyright : Your copyright notice 7 Description : 程序3-4 对指定的描述符打印文件标志 8 ============================================================================ 9 */ 10 11 #include <stdio.h> 12 #include <fcntl.h> 13 #include <stdlib.h> 14 #include "ourhdr.h" 15 16 int main(int argc, char *argv[]) 17 { 18 int val; 19 20 if (argc != 2){ 21 err_quit("usage: ./test <descriptor#>"); 22 } 23 24 if ((val = fcntl(atoi(argv[1]), F_GETFD, 0)) < 0){ 25 err_sys("fcntl error for fd: %d ", atoi(argv[1])); 26 } 27 28 switch(val & O_ACCMODE){ 29 case O_RDONLY: 30 printf("read only"); 31 break; 32 case O_WRONLY: 33 printf("write only"); 34 break; 35 case O_RDWR: 36 printf("read write"); 37 break; 38 default: 39 err_dump("unknown access mode"); 40 } 41 42 if (val & O_APPEND){ 43 printf(", append"); 44 } 45 46 if(val & O_NONBLOCK){ 47 printf(", nonblock"); 48 } 49 #if defined(O_SYNC) 50 if (val & O_SYNC){ 51 printf(", synchronous writes"); 52 } 53 #endif 54 55 #if !defined(_POSIX_C_SOURCE) && defined(O_FSYN) 56 if (val & O_FSYN){ 57 printf(", synchronous writes."); 58 } 59 #endif 60 61 putchar(' '); 62 exit(0); 63 }