0

stdoutCプログラムでLinuxコマンドを実行し、プログラムでこのコマンドから読み取り(解析)したい。以下のコードは機能しますが、文字列とバイトの読み取り制限に加えて、コマンドの実行時間を制限する方法がわかりません。何か案は?

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);
4

1 に答える 1

0

select() でそれを行うことができます。Select は、オプションのタイムアウトを使用して、イベント (読み取り可能、書き込み可能など) が発生するのを 1 つ以上のファイル記述子で「待機」できます。ファイル記述子で動作するため、fileno(ps_pipe) も必要です。

ただし、popen は子プロセスの特定の詳細を隠すため、フォークされたプロセスを簡単に強制終了できないことに注意してください。このような制御が必要な場合は、下位レベルの関数 fork()、pipe()、dup()、exec()、wait()、および場合によっては kill() を使用する必要があります。

于 2012-05-13T12:23:47.257 に答える