zoukankan      html  css  js  c++  java
  • read 由于信号中断,没读到任何数据

    第一天写博客,想想写什么呢,突然想到一年前遇到的bug。好吧,就你了。

    代码:

    CfgRet getConfigfilePath(char *ConfigfilePath)

    {

        char line[64] = {0};

        char *pStr = NULL;

        char *firstChar;

       

        sprintf(line, "%s", "cfg_file_path.sh config");

        FILE *pp = popen(line, "r");

        if (pp != NULL)

        {

            char buf[256] = {0};

            pStr = fgets(buf, sizeof(buf), pp);

            if(pStr == NULL)

                printf("fgets exec error.\r\n");

            printf("config name length: %d\r\n",strlen(buf));

    ……..

        return CFG_RET_SUCCESS;

    }

    问题描述:

    在串口执行cfg_file_path.sh config能够标准输出config文件的路径。

    代码执行pStr = fgets(buf, sizeof(buf), pp);  有时fgets的返回值pStr为NULL,打印fgets exec error。

    代码修改:

    CfgRet getConfigfilePath(char *ConfigfilePath)

    {

        char line[64] = {0};

        char *pStr = NULL;

        char *firstChar;

       

        sprintf(line, "%s", "cfg_file_path.sh config");

        FILE *pp = popen(line, "r");

        if (pp != NULL)

        {

            char buf[256] = {0};

            do

            {

                       pStr = fgets(buf, sizeof(buf), pp);

                       if(feof(pp))

                       {

                                         printf("End of file\n");

                                         break;

                       }

            } while ((pStr == NULL) && (errno == EINTR));

            printf("config name length: %d\r\n",strlen(buf));

    ......

        return CFG_RET_SUCCESS;

    }

    问题分析:

    fgets会使用系统调用read,如果捕捉到SIGCHID,read调用就有被中断的可能。

    在该进程初始化的时候,移除对该信号的处理,也可以解决避免SIGCHID会read的影响。main.c  sigaction( SIGCHLD, &sa_child, 0 );

  • 相关阅读:
    JS校验 if (! temp_var) {} //拦截 ''和 undefined
    17 JQuery高级----学习笔记
    16 JQuery---JavaScript框架
    15 Filter过滤器和Listener监听器
    14 用户信息展示综合案例
    13 JSP、MVC开发模式、EL表达式和JSPL标签+软件设计架构---学习笔记
    12 Cookie、Session和JSP基础
    11 Reponse对象+ServletContext对象
    10 Servlet+Http+Request对象
    09 Servlet相关知识点---学习笔记
  • 原文地址:https://www.cnblogs.com/nullbaby/p/7064840.html
Copyright © 2011-2022 走看看