该计划: 我的程序的目标是利用另一个程序来执行其计算。问题是异步与该程序通信。以下是我用于调用其他程序的代码的一部分。这是通过分布式计算的脚本完成的。
while(c < Images)
{
system(CommandArray[c]);
k = chdir(ImageArray[c]);
if(k != 0)
{
printf("Directory Change Failed!");
}
else
{
system("qsub SubScript.sh");
printf("Job Submitted for Image: %d \n",c+1);
sleep(1);
}
c++;
k = chdir("../");
}
c = 0;
printf("Starting 'Checking' Script");
system("./CheckingScript.sh 3");
变量的含义:
问题:无论我做什么,我都无法让C程序等待结果返回而不会导致其他程序突然被清空的那些目录(文件)都还在那里,但他们的内容被删除)。我已经尝试直接从C程序检查目录,但这会导致上述问题。所以作为最后的手段,我试图编写一个脚本来检查我。它的工作原理! (好吧不是真的...)我可以使用命令行中的脚本,它按预期工作,但是当我通过system()提交它时,它不会回显任何内置语句以显示它正在运行。这意味着system()执行然后程序结束而不从其应该等待的其他程序中收集结果。
感谢您阅读本文,我非常感谢您的帮助!我知道system()命令有点暴躁,所以任何有关替代选项的建议都将受到高度赞赏。有关我的计划的更多信息,请参阅我的博客:Link to Blog
答案 0 :(得分:0)
好吧,我猜函数popen()可以帮助你收集结果。 函数popen()执行命令并在调用程序和执行的命令之间连接管道。我建议您参考函数的手册页以获取详细信息。
尝试以下代码并使用fgets()函数从管道读取。
FILE *fp = popen("./CheckingScript.sh 3", "r");
不要忘记使用pclose()而不是fclose()来关闭fp。