如果文件被fopen()和fgets()覆盖会怎么样?我有一个程序失败了以下堆栈跟踪:
0x00007f9d63629850 (Linux)
0x00007f9d6253e8ab (/lib64/libc-2.11.3.so) __memchr
0x00007f9d62523996 (/lib64/libc-2.11.3.so) _IO_getline_info_internal
0x00007f9d6252d0cd (/lib64/libc-2.11.3.so) __GI_fgets_unlocked
我有理由相信正在读取的文件可能会在fopen()和fgets()之间被覆盖。这有多可信?
我们在SUSE 11.4上使用glibc 2.11.3,所有更新和补丁都应用于glibc。
答案 0 :(得分:0)
这取决于文件在磁盘上的覆盖方式。
fopen
在第一次读取之前不会自动填充缓冲区,因此fgets
将填充缓冲区并获取新数据(在并发更新之后)。