/** * @file demo8.c * @Synopsis * 改变一个己打开文件的属性 * #include <fcntl.h> * int fcntl(int fd,int cmd,... arg ); * @param int fd * * @param int cmd command * 读取它的flag * F_GETFL(void) * 要是读就不需要第三个参数了 * 设置flag * F_SETFL(long) * 要是是设置的话,它的返回就是成功了,第三个参数就是要设置的啦 * @author MrClimb * @version 1.1.0 * @date 2012-05-09 */
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h>
int main(int argc, char **argv) { #if 0 // 阻塞情况下 输入 char buf[10]; ssize_t rd,wd; rd = read(STDIN_FILENO,buf,sizeof(buf)); wd = write(STDOUT_FILENO,buf,rd); #endif #if 1 // 非阻塞情况下 输入 char buf[10]; int flags; flags = fcntl(STDIN_FILENO,F_GETFL); flags |= O_NONBLOCK; if(fcntl(STDIN_FILENO,F_SETFL,flags)==-1) { perror("fcntl"); exit(1); } size_t rd=0,wd=0; while(rd<=0){ rd=read(STDIN_FILENO,buf,sizeof(buf)); }
printf("success read rd = %d\n",rd); wd = write(STDOUT_FILENO,buf,rd); printf("success write wd = %d\n",wd);
#endif return 0; }