限制管道程序的执行时间

时间:2012-05-13 11:23:17

标签: c time pipe fork

我想在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);

1 个答案:

答案 0 :(得分:0)

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

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