2012-05-13 36 views
0

我想在C程序中执行Linux命令,并在程序中从此命令读取(解析)stdout。下面的代码工作,但我不知道如何限制命令的执行时间,除了字符串和字节读取限制。有任何想法吗?限制管道程序的执行时间

FILE *ps_pipe; 
int bytes_read; 
int nbytes = 100; 
char *my_string=NULL; 
char message[1024]; 
message=sprintf(message,"any command here"); 
ps_pipe = popen (message, "r"); 
my_string = (char *) malloc (nbytes + 1); 
bytes_read = getdelim (&my_string, &nbytes, "delimiter_word", ps_pipe); 
pclose(ps_pipe); 
free(my_string); 
+0

[alarm](http://www.mkssoftware.com/docs/man3/alarm.3.asp)是你的朋友。 –

+0

要么就是要关闭管道。子进程将以EPIPE/SIGPIPE结束。 – wildplasser

+0

@DavidSchwartz我使用警报,它的工作原理,但我不知道为什么报警处理程序中的pclose不能正确执行文件描述符,这是全局变量,并且在另一个函数中只与open和fread一起使用。 – risque

回答

0

你可以用select()来做到这一点。选择可以“等待”一个或多个文件描述符以使事件发生(可读,可写,...),并有可选的超时。由于它对文件描述符进行操作,因此还需要fileno(ps_pipe)。

但请记住,您将无法轻松杀死分叉进程,因为popen隐藏了子进程的某些细节。如果你需要这样的控制,你需要使用低级函数fork(),pipe(),dup(),exec(),wait()和可能的kill()。