功能:根据描述符来获取或设置 操作文件时 的属性

 

 1 #include<stdio.h>
 2 #include<unistd.h>
 3 #include<fcntl.h>
 4 
 5 int
 6 main(void)
 7 {
 8         int             fd0,fd;
 9         int             flag;
10         if(-1==(fd0 = open("fcntl.c",O_RDONLY))){
11                 printf("open failed\n");
12                 return  -1;
13         }
14 
15         //复制文件描述符到fd
16         printf("复制文件描述符:\n");
17         fd = 100;
18         fcntl(fd0,F_DUPFD,fd);
19         close(fd0);
20 
21         //获取/设置文件描述符的标志
22         printf("获取文件描述符的标志:\n");
23         flag = fcntl(fd,F_GETFD);
24         printf("F_GETFD1        :       flag = %d\n",flag);
25         fcntl(fd,F_SETFD,flag|FD_CLOEXEC);
26         flag = fcntl(fd,F_GETFD);
27         printf("F_GETFD2        :       flag = %d\n",flag);
28 
29         //获取设置文件状态标志 , 注意 : 只能改O_APPEND  O_NONBLOCK O_SYNC 
30         //O_DSYNC   O_RSYNC  O_FSYNC  O_ASYNC  这几个标志
31         printf("获取设置文件状态标志:\n");
32         flag = fcntl(fd,F_GETFL);
33         printf("F_GETFL1        :       stat = %o\n",flag);
34         fcntl(fd,F_SETFL,flag|O_APPEND);
35         flag = fcntl(fd,F_GETFL);
36         printf("F_GETFL2        :       stat = %o\n",flag);
37 
38         //获取/设置接收 SIGIO  和 SIGURG 信号的进程ID 或 进程组ID
39         //(设置异步I/O所有权)
40 printf("设置异步I/O所有权:\n"); 41 flag = fcntl(fd,F_GETOWN); 42 if(flag >= 0) 43 printf("F_GETOWN1 : own = %d\n",flag); 44 else45 printf("F_GETOWN1 : grp = %d\n",flag); 46 47 fcntl(fd,F_SETOWN,1); 48 49 flag = fcntl(fd,F_GETOWN); 50 if(flag >= 0) 51 printf("F_GETOWN2 : own = %d\n",flag); 52 else53 printf("F_GETOWN2 : grp = %d\n",flag); 54 55 56 57 close(fd); 58 return 0; 59 }

 

 

F_GETOWN  :  当返回的是进程组ID 的时候 , ID 值为 负值 , 但返回的是进程ID 的时候, 返回的值为 非负值

还有设置文件锁的功能 :

    xxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

 

 

 

posted on 2013-05-29 22:40  wowk  阅读(289)  评论(0编辑  收藏  举报