/**
* @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;
}