1 //http://blog.chinaunix.net/uid-24549279-id-71355.html
2 /*
3 ============================================================================
4 Name : test.c
5 Author : blank
6 Version :
7 Copyright : Your copyright notice
8 Description : 程序3-5 对一个文件描述符打开一个或多个文件状态标志
9 ============================================================================
10 */
11
12 #include <stdio.h>
13 #include <unistd.h>
14 #include <fcntl.h>
15 #include "ourhdr.h"
16
17 /*
18 * flags are file status flags to turn on
19 */
20 void set_f1(int fd, int flags){
21 int val;
22
23 if ((val = fcntl(fd, F_GETFD, 0)) < 0){
24 err_sys("fcntl F_GETFD error\n");
25 }
26
27 // turn on
28 val |= flags;
29
30 if (fcntl(fd, F_SETFD, val) < 0){
31 err_quit("fcntl F_SETFL error\n");
32 }
33 }
34
35 /*
36 * flags are file status flags to turn off
37 */
38 void del_f1(int fd, int flags){
39 int val;
40
41 if ((val = fcntl(fd, F_GETFD, 0)) < 0){
42 err_sys("fcntl F_GETFD error\n");
43 }
44
45 // turn off
46 val &= ~flags;
47
48 if (fcntl(fd, F_SETFD, val) < 0){
49 err_quit("fcntl F_SETFL error\n");
50 }
51 }