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; 你的cmd要是没输出,可不就等在那么 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]