我已经测试了下面的代码来对字符串进行排序。
我添加 sleep 来检查排序程序是否会在其读取管道上等待要排序的信息的原因。下面的程序无需调用 sleep() 即可运行,为什么?
#include <stdio.h>
#define MAXSTRS 5
int main(void)
{
int cntr;
FILE *pipe_fp;
char *strings[MAXSTRS] = { "echo", "bravo", "alpha",
"charlie", "delta"};
/* Create one way pipe line with call to popen() */
if (( pipe_fp = popen("sort", "w")) == NULL)
{
perror("popen");
exit(1);
}
//printf("sleeping\n");
//sleep(10);
/* Processing loop */
for(cntr=0; cntr<MAXSTRS; cntr++) {
fputs(strings[cntr], pipe_fp);
fputc('\n', pipe_fp);
}
/* Close the pipe */
pclose(pipe_fp);
return(0);
}
最佳答案
您可能只是在用于测试代码的站点的限制中运行。如果 sleep()
的值较小(例如 1),则效果很好。我猜想测试站点正在对其编译和运行的程序应用超时,以便拥有一个 react 良好的网站。
找一个像样的 unix 并在那里尝试一下;您可能会像我一样执行它时遇到一些困难。
关于c - popen() 和 sleep() 调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028517/