用C读取和管道大文件

时间:2010-11-13 18:02:37

标签: c file file-io postscript

我有兴趣编写一个修改PostScript文件的实用程序。它需要遍历文件,对页数和维度做出某些决定,然后将输出写入文件或标准输出,对PostScript代码进行某些修改。

在这种情况下,在* NIX系统上处理文件处理的好方法是什么?我在C中管道和分叉是相当新的,我的理解是,在直接读取文件的情况下,我可能会在输入文件周围来回寻找,但如果输入直接通过管道传输到程序中,我不能简单地倒回到输入的开头,因为输入可能是网络流,例如,正确吗?

不是将整个PS文件存储到可能变得庞大的内存中,而是在第一次进行页面分析时将输入缓冲到磁盘,然后从临时文件中重新读取,这似乎更有意义,生成输出,并删除临时文件。如果这是一个可行的解决方案,哪里可以在* NIX系统上存储这样的文件?我不确定这样的代码是多么安全:程序可能会被同一服务器上的多个用户使用。听起来我确保将文件保存在给定用户帐户唯一的临时目录中的某个位置,并将磁盘上的临时文件命名为一个相当独特的名称。

非常感谢关于这个疯狂令人费解的文件处理世界的任何提示和指示。

3 个答案:

答案 0 :(得分:4)

使用mkstemp(3)创建临时文件。它将为您处理并发问题。 mmap(2)会让你在放弃文件中移动。

答案 1 :(得分:1)

如果输入被直接传送到程序中,我不能简单地回到输入的开头,因为输入可能是网络流,例如,对吗?

这是对的。您只能对文件执行随机访问。

如果您阅读该文件,也许您可​​以构建一个元数据表,您可以使用该表来稍后查找该文件的特定部分,而不会将文件本身保留在内存中。

答案 2 :(得分:1)

/ tmp是unix系统上的临时目录。它由FHS指定。它在系统重启时被清理干净。

如果你需要更多的持久性数据存储而不是重新启动后没有清除的/ var / tmp。还有FHS。

http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard