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 );

  • 相关阅读:
    Redis的高级应用——数据安全
    [转]C#多线程和线程池
    详解从面向接口编程到依赖注入
    Java Servlet 配置
    Java Servlet 3.0 新特性
    [转]C#中的委托和事件
    iReport5.6.0使用说明
    Visual Studio 2015 官方下载及密钥
    Java Swing 托盘闪烁Demo实例
    Win7 利用批处理文件结束进程
  • 原文地址:https://www.cnblogs.com/nullbaby/p/7064840.html
Copyright © 2011-2022 走看看