- 论坛徽章:
- 0
|
测试中发现fgets挂死的现象,gdb跟踪栈帧信息如下:- (gdb) bt
- #0 0x00717430 in __kernel_vsyscall ()
- #1 0x005558eb in read () from /lib/libc.so.6
- #2 0x004ef72b in _IO_new_file_underflow () from /lib/libc.so.6
- #3 0x004f144b in _IO_default_uflow_internal () from /lib/libc.so.6
- #4 0x004f2a5a in __uflow () from /lib/libc.so.6
- #5 0x004e536c in _IO_getline_info_internal () from /lib/libc.so.6
- #6 0x004e52b1 in _IO_getline_internal () from /lib/libc.so.6
- #7 0x004e41ea 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;
复制代码 |
|