F_SETFL 将文件状态标志设置为第三个参数的值(取为整型值)。可以更改的几个标志是:O_APPEND、O_NONBLOCK、O_SYNC、O_DSYNC、O_RSYNC、O_FSYNC和O_ASYNC。 F_GETOWN 取当前接受SIGIO和SIGURG信号的进程ID或进程组ID。 F_SETOWN 设置接收SIGIO和SIGURG信号的进程ID或进程组ID。正当arg指定一个进程ID,负的arg...
ret = fcntl(0, SETFL, flags | O_NONBLOCK); //设置为非阻塞,但不更改其他状态 if (ret == -1) ERR_EXIT("fcntl set flag error"); */set_flag(0,O_NONBLOCK);ret=read(0,buf,1024);if(ret==-1)ERR_EXIT("read error");printf("buf=%s\n",buf);return0;}voidset_flag(intfd,intflags...
(5)F_SETFL 将文件状态标志设置为第三个参数的值(取为整 型值) 可以更改的几个标志是:O_APPEND、O_NONBLOCK、O_SYNC、O_DSYNC 和O_RSYNC。 例子: 下面程序的第一个参数指定文件描述符,并对于该描述符打印其所选择的文件状态标志说明。 #include <stdlih.h>#include<stdio.h>#include<fcntl.h>intmain(...
if (val & O_NONBLOCK) printf(", nonblocking"); if (val & O_SYNC) printf(", synchronous writes"); #if !defined(_POSIX_C_SOURCE) && defined(O_FSYNC) && (O_FSYNC != O_SYNC) if (val & O_FSYNC) printf(", synchronous writes"); #endif putchar(’\n’); exit(0); } 1. 2...
第3章 文件I/O(4)_dup、dup2、fcntl和ioctl函数,5.其它I/O系统调用(1)dup和dup2函数头文件#include<unistd.h>函数intdup(intoldfd);intdup2(intoldfd,intnewfd);返回值若成功返回新文件描述符,出错返回-1功能文件描述符的复制(将oldfd复制给n
intsetnonblocking(intfd){intold_option = fcntl(fd, F_GETFL);/* 获取文件描述符旧状态标志 */intnew_option = old_option | O_NONBLOCK;/* 设置非阻塞标志 */fcntl(fd, F_SETFL, new_option);/* 修改fd的状态标志 */returnold_option;/* 返回文件描述符旧的状态标志, 便于日后恢复 */} ...
可以更改的标志有:O_APPEND、O_NONBLOCK、O_SYNC、O_ASYNC但要注意,O_RDONLY、O_WRONLY和O_RDWR不适用。 【编程实验】设置文件状态标志 //io.h和io.c文件与上例相同 //file_append_flag.c #include "io.h" #include <unistd.h> #include <stdio.h> #include <stdlib.h> //exit #include <string....
O_ADDEND O_NONBLOCK O_SYNC O_DSYNC O_DSYNC O_RSYNC 下面给出了一个简单的使用fcntl的例子: #include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>#include<string.h>#include<errno.h>intmain(intargc,int**argv){intvalue;if(argc...
assert(ret!=-1);/*将管道pipefd_stdout[0]输出复制到管道pipefd_file的输入端*/ret=tee(pipefd_stdout[0],pipefd_file[1],32768,SPLICE_F_NONBLOCK); assert(ret!=-1);/*将管道pipefd_file的输出定向到文件描述符filefd上*/ret=splice(pipefd_file[0],NULL,filefd,NULL,32768,SPLICE_F_MORE|SPLIC...
intsetnonblocking(intfd){intold_option = fcntl(fd, F_GETFL);/* 获取文件描述符旧状态标志 */intnew_option = old_option | O_NONBLOCK;/* 设置非阻塞标志 */fcntl(fd, F_SETFL, new_option);/* 修改fd的状态标志 */returnold_option;/* 返回文件描述符旧的状态标志, 便于日后恢复 */} ...