1
我们有一段使用Flex的C代码FILE *描述符的遗留代码。为了支持读取压缩文件到Flex,我们使用在unix文件系统中对popen使用FILE描述符时崩溃
FILE* file = popen("gzip -cd <filename>");
而非fopen
延长了“开放”的语义打开gzip压缩文件。
我们遇到了一些问题,其中最近跨UNIX文件系统(可能安装另一个系统上使用NetApp的NFS)在尝试这使得这整个码流崩溃(段错误),我们看到的第一个消息是
gzip: stdout: Broken Pipe
和我们自己的死机架。 如果我们将该文件移动到正在运行进程的本地文件系统,则不存在段错误,并且所有内容均正常工作。
我们试过复制或修复了什么?
- 读取使用压缩文件的gzip/bzip2的等,从内部测试NFS文件系统
- 验证目标文件可以打开
- “开放”的文件,并宣读了几个字节,以确保它可以打开通过这个过程
所有这些成功,但我们仍然遇到了崩溃。
我们没有想法,可以使用一些建议。
萨姆·阿普尔顿
你有没有考虑过使用'zlib'? – Barmar
在popen期间或稍后的命令期间是否发生段错误?你有没有试过通过valgrind运行代码?它通常可以告诉你段错误是什么。 –
另外,从段错误中发布整个堆栈跟踪。它可以提供根本原因的线索。 –