临时存储长字符串数据

时间:2012-05-14 16:27:24

标签: c linux pipe std

我正在寻找在posix系统上使用标准库临时使用C程序存储可能非常大的字符串的适当方法。该字符串是C函数的线性输出的顶点。在最后一次调用此函数后,我想进一步处理(输出)数据。在分配大量内存和创建临时文件之间是否存在简单的折衷方案?例如,一旦需要数据,我可以想象写入管道并再次从该管道读取。但我不确定在这种情况下如何在内部处理数据以及它是否会优先于临时文件。

2 个答案:

答案 0 :(得分:1)

这主要取决于您需要对数据执行的操作。如果您需要随机访问它(例如,如果您需要对其进行排序),您可能会发现,如果文件全部在内存中,则更容易,尽管使用可能大量内存的成本。

特别是如果您能够按顺序访问数据以进行处理,如果您希望数据量很大,我通常会建议使用临时文件。

除非您在主线程写入时创建另一个线程以从管道中读取数据,否则管道将无法帮助您。否则你只需快速填满管道的缓冲区并阻塞(实际上是死锁)。

答案 1 :(得分:0)

您可以决定(根据您的评论,您应该根据具体情况决定)是将其保留在内存中还是写入磁盘。如果您注意到数据增长超过某个阈值,则写入磁盘并切换方法以保留剩余数据。

管道不是一个好主意,因为它是一个存储容量非常小的进程间通信方法(自Linux 2.6以来大约为64kiB,在2.4中,AFAIR甚至更低 - 大约4 kiB)。