【发布时间】:2011-06-17 09:36:31
【问题描述】:
我在 Linux 上使用来自 libc 的 system() 时遇到问题。我的代码是这样的:
system( "tar zxvOf some.tar.gz fileToExtract | sed 's/some text to remove//' > output" );
std::string line;
int count = 0;
std::ifstream inputFile( "output" );
while( std::getline( input, line != NULL ) )
++count;
我反复运行这个 sn-p,偶尔我发现在运行结束时 count == 0 - 没有从文件中读取任何行。我查看了文件系统,该文件具有我期望的内容(大于零行)。
我的问题是 system() 是否应该在传入的整个命令完成时返回或者是否存在管道'|'意味着 system() 可以在管道完成后的部分命令之前返回吗?
我没有明确地使用“&”来将命令的任何部分作为 system() 的背景。
为了进一步澄清,我在实践中确实并行运行了多次代码 sn-p,但输出文件是一个以线程 ID 命名的唯一文件名,并且每次调用 system() 时都会递增一个静态整数。我确信每次调用 system() 时输出和读取的文件都是唯一的。
【问题讨论】:
-
你有没有发现为什么 count 有时会在你认为不应该为零的情况下为零?