改变终端属性 实现非阻塞

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值