popen:如何测试程序结束 [英] popen: how to test for end of program
问题描述
我正在尝试编写一个使用popen的程序,但我遇到了问题。我想要检测我用popen调用的程序是否已经结束。例如:
#include< stdio.h>
#include< sys / types.h>
# include< unistd.h>
int main()
{
FILE * pipe = NULL;
int i = 0;
while(1){
if(i == 10){
pipe = popen(" ls"," w");
}
if(pipe!= NULL&& feof(pipe) ){
printf(程序已结束\ n);
}
i ++;
usleep(1000);
}
}
这不行。
有没有人知道如何测试程序是否已经结束?
谢谢,
巴斯蒂安
>
I am trying to write a program which uses popen but I have a problem. I
want to detect if the program I call with popen has ended. For example:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
FILE *pipe = NULL;
int i=0;
while(1) {
if (i == 10) {
pipe = popen("ls", "w");
}
if(pipe != NULL && feof(pipe)) {
printf("Program has ended\n");
}
i++;
usleep(1000);
}
}
This doesn''t work.
Does anyone know how to test if the program has ended ?
Thanks,
Bastiaan
推荐答案
ba ****** *****@gmail.com 写道:
#我正在尝试编写一个使用popen的程序,但我遇到了问题。我想要检测我用popen调用的程序是否已经结束。例如:
你对popen / pclose没有那么多的控制权。获得EOF时,可用的标准输出已经耗尽了;当pclose回来时,孩子已经离开。如果你需要更好的级别控制,你必须自己执行fork(),pipe(),exec *()和
等待*()调用。 br />
-
SM瑞恩 http://www.rawbw.com/~wyrmwif/
谁领导这些暴民?
ba***********@gmail.com wrote:
# I am trying to write a program which uses popen but I have a problem. I
# want to detect if the program I call with popen has ended. For example:
You don''t have that much control with popen/pclose. The available stdout has been
exhausted when you get an EOF; the child has exitted when pclose returns. If you
need finer level control, you have to do the fork(), pipe(), exec*(), and
wait*() calls yourself.
--
SM Ryan http://www.rawbw.com/~wyrmwif/
Who''s leading this mob?
ba*********** @ gmail.com 写道:
我正在尝试编写一个使用popen的程序,但我遇到了问题。我想要检测我用popen调用的程序是否已经结束。例如:
#include< stdio.h>
#include< sys / types.h>
#include< unistd.h>
.... snip ...
有人知道如何测试程序是否已经结束?
I am trying to write a program which uses popen but I have a problem. I
want to detect if the program I call with popen has ended. For example:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
.... snip ...
Does anyone know how to test if the program has ended ?
既然你没有提到,除了< stdio.h> ;,存在于
便携式标准C语言中,答案是否定的,此处没有人知道。
但是,如果你要转到新闻组那些东西是局部的,可能用名称中的unix,答案可能是
不同。
-
一些信息链接:
新闻:news.announce.newusers
http://www.geocities.com/nnqweb/
http://www.catb.org/~esr/faqs/smart-questions.html
http://www.caliburn.nl/topposting.html
http://www.netmeister.org/news/learn2quote.html
Since nothing you mention, apart from <stdio.h>, exists in the
portable standard C language, the answer is NO, nobody here knows.
However, if you were to move to a newsgroup where those things are
topical, possibly with unix in its name, the answer might be
different.
--
Some informative links:
news:news.announce.newusers
http://www.geocities.com/nnqweb/
http://www.catb.org/~esr/faqs/smart-questions.html
http://www.caliburn.nl/topposting.html
http://www.netmeister.org/news/learn2quote.html
ba *********** @ gmail.com 写道:
I我正在尝试编写一个使用popen的程序,但我遇到了问题。我想要检测我用popen调用的程序是否已经结束。例如:
#include< stdio.h>
#include< sys / types.h>
#include< unistd.h>
int main()
{
FILE * pipe = NULL;
int i = 0;
while(1){
if(i == 10){
pipe = popen(" ls"," w");
}
if(pipe!= NULL&& feof(pipe)){
printf(程序已结束\ n);
}
i ++ ;
usleep(1000);
}
}
这不行。
有没有人知道如何测试该程序是否已经结束?
I am trying to write a program which uses popen but I have a problem. I
want to detect if the program I call with popen has ended. For example: #include <stdio.h>
#include <sys/types.h>
#include <unistd.h> int main()
{
FILE *pipe = NULL;
int i=0; while(1) {
if (i == 10) {
pipe = popen("ls", "w");
}
if(pipe != NULL && feof(pipe)) {
printf("Program has ended\n");
}
i++;
usleep(1000);
}
} This doesn''t work. Does anyone know how to test if the program has ended ?
可能,但因为它在clc中的主题很多人赢了' '$
在这里讨论它,因为它不是C问题 - 标准C不知道同时运行的其他程序或关于功能的b $
tions像popen()。所以你最好在comp.unix.programmer这样的小组中问这些问题
,这是关于主题的(但是
你也可能会得到告诉你几乎不能得到与popen()一起工作的
并且你将需要使用fork()
和一个exec() - 函数族 - 并且你需要
" r"作为popen()的第二个参数当你使用ls时,
ls应该为你创建输出阅读,不是吗?)。
但你的程序也存在与C相关的问题:feof()
won'在你真正从文件中读到
之前,不要告诉你任何合理的事情。 feof()无法预测EOF是否会在下一次读取时重新打开
,之后只能告诉你
这就是为什么读取从文件失败。所以,即使你使用popen()产生的程序已经死了并关闭了它的管道边缘,只需调用feof()就不会帮助你了。因为
你从来没有读过任何东西,只有那个(加上清空管道)
可能导致feof()返回0以外的东西。
问候,Jens
-
\ Jens Thoms Toerring ___ Je *********** @ physik.fu-berlin.de
\ __________________________
这篇关于popen:如何测试程序结束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!