zoukankan      html  css  js  c++  java
  • fcntl()函数之非阻塞模型

    优点:设置标准输入为非阻塞(有数据则读 没有数据则立即返回),常用于网络通信以及轻量信息多并发中

    步骤:

    1.oldflag=fcntl(STDIN_FILENO,F_GETFL);

      获取标准输入的文件打开标志。

    2.fcntl(STDIN_FILENO,F_SETFL,oldflag|O_NONBLOCK)

      将该标志加入O_NONBLOCK非阻塞标志

    3.编写函数逻辑,以及要处理问题。

    4.代码如下

    //非阻塞模型
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>

    int main(void)
    {
    char *t,buf[4096];

    //设置标准输入为非阻塞(有数据则读 没有数据则立即返回)
    int ret,oldflag;
    oldflag=fcntl(STDIN_FILENO,F_GETFL);
    if(oldflag==-1) return 1;//error!!!
    if(fcntl(STDIN_FILENO,F_SETFL,oldflag|O_NONBLOCK)==-1)
    {
    perror("set no block ");
    return 2;
    }

    while(1)
    {
    t=fgets(buf,4096,stdin);//getchar scanf read ==>stdin
    if(t==NULL){
    printf("非阻塞返回. ");
    }else{
    printf("buf>>>%s ",buf);
    }

    printf("do other. ");
    usleep(500000);//0.5s
    }

    return 0;
    }

    ////////////////////////////////////////////////////////利用阻塞错误、、、、、、、、、、、、、、

    //非阻塞模型
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <errno.h>//使用errno错误标记变量

    int main(void)
    {
    char buf[4096+1];

    //设置标准输入为非阻塞(有数据则读 没有数据则立即返回)
    int ret,oldflag;
    oldflag=fcntl(STDIN_FILENO,F_GETFL);
    if(oldflag==-1) return 1;//error!!!
    if(fcntl(STDIN_FILENO,F_SETFL,oldflag|O_NONBLOCK)==-1)
    {
    perror("set no block ");
    return 2;
    }

    while(1)
    {
    ret=read(STDIN_FILENO,buf,4096);
    if(ret==-1){//error
    if(errno==EAGAIN)//非阻塞
    {
    printf("我要的非阻塞. ");
    }
    else
    {
    perror("read from stdin error");
    return 3;
    }
    }else{
    printf("buf>>>%s ",buf);
    }

    printf("do other. ");
    usleep(500000);//0.5s
    }

    return 0;
    }

  • 相关阅读:
    html_dom类读取
    PHPExcel读取Excel文件的实现代码
    PHP中的mb_convert_encoding与iconv函数介绍
    BZOJ 3160 万径人踪灭 解题报告
    BZOJ 4036 [HAOI2015] Set 解题报告
    BZOJ 3288 Mato矩阵 解题报告
    BZOJ 3173 [Tjoi2013] 最长上升子序列 解题报告
    BZOJ 4123 [Baltic2015] Hacker 解题报告
    BZOJ 4127 Abs 解题报告
    BZOJ 4145 [AMPPZ2014] The Prices 解题报告
  • 原文地址:https://www.cnblogs.com/edan/p/8833585.html
Copyright © 2011-2022 走看看