tqyou85 发表于 2016-05-24 10:22

fgets挂死

测试中发现fgets挂死的现象,gdb跟踪栈帧信息如下:(gdb) bt
#00x00717430 in __kernel_vsyscall ()
#10x005558eb in read () from /lib/libc.so.6
#20x004ef72b in _IO_new_file_underflow () from /lib/libc.so.6
#30x004f144b in _IO_default_uflow_internal () from /lib/libc.so.6
#40x004f2a5a in __uflow () from /lib/libc.so.6
#50x004e536c in _IO_getline_info_internal () from /lib/libc.so.6
#60x004e52b1 in _IO_getline_internal () from /lib/libc.so.6
#70x004e41ea in fgets () from /lib/libc.so.6
只有一个线程会调用到这里。代码如下:fp = popen(cmd, "r");
if(fp == NULL)
        {
                return -1;
        }
       
        while(fgets(line, sizeof(line), fp))
        {
                if(strstr(line, string))
                {
                        pclose(fp);
                        return 1;
                }
        }

        pclose(fp);
      return 0;

lxyscls 发表于 2016-05-24 11:35

你的cmd要是没输出,可不就等在那么

tqyou85 发表于 2016-05-24 13:51

lxyscls 发表于 2016-05-24 11:35 static/image/common/back.gif
你的cmd要是没输出,可不就等在那么

我的cmd是ping ip -c 1 -W 1-W timeout
            Time to wait for a response, in seconds. The option affects only timeout in absense of anyresponses,otherwise
            ping waits for two RTTs.
限制了命令执行的超时时间的,不会一直等着
页: [1]
查看完整版本: fgets挂死