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

  • 相关阅读:
    [LeetCode] Kth Smallest Element in a BST
    Dojo入门篇
    不要小看了get 与set
    怎样安装Windows7操作系统
    MFC Wizard创建的空应用程序中各个文件内容的解析
    hadoop hdfs空间满后重新启动不了
    树形结构——基本原理
    R语言pdf输出中文乱码处理
    Javascript基本概念梳理
    Java动态代理
  • 原文地址:https://www.cnblogs.com/nullbaby/p/7064840.html
Copyright © 2011-2022 走看看