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中map和普通对象性能差距有多大?
    谈一谈在css中的wrapper
    react-loadable简单实现
    setstate源码分析
    react setstate()的秘密
    java io学习笔记二
    java8下 枚举 通用方法
    SLF4J、Log4J使用记录
    ByteBuffer flip描述
    unique within an element
  • 原文地址:https://www.cnblogs.com/nullbaby/p/7064840.html
Copyright © 2011-2022 走看看