• 締切済み

Syntax Errorで困っています。

こんばんは。 C言語でexeclpコマンドを使いたいのですが、構造エラーが出て困っています。以下が問題のソースコードです。 execlp("tcpdump","tcpdump","tcp[13] & 255 == 2"," > ","file.txt",NULL); 上の書き方ではダメでした。成功したのは、 execlp("tcpdump","tcpdump","tcp[13] & 255 == 2",NULL); という書き方でしたが、目標は >tcpdump 'tcp[13] & 255 == 2' > file.txt というコマンド文をプログラム内で実行することなので、上の成功した例ではテキストファイルに保存できません。 -wオプションではバイナリ形式になってしまうので使えません。 色々と試行錯誤を繰り返しましたが解決には至っておりません。 どんな些細な意見でも構いません。どうか力を貸して頂けないでしょうか。 以下は全ソースコードです。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<errno.h> #include<signal.h> #include<sys/types.h> int main(){ int fd[2],a,i = 0; pid_t pid; pipe(fd); char buff[1024]; pid = fork(); if(pid == 0){ close(STDOUT_FILENO); dup2(fd[1],STDOUT_FILENO); close(fd[0]); execlp("tcpdump","tcpdump","tcp[13] & 255 == 2"," > ","file.txt",NULL); } else{ sleep(1); kill(pid,SIGTERM); wait(); FILE *fp; fp = popen("wc -l file.txt","r"); for(i=0;i<3;i++){ a = fgetc(fp); putc(a,stdout); }printf("\n"); return 0; } } お手数でしょうが、どうぞよろしくお願いします。

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

">"によるファイルへのリダイレクトはtcpdump自身の機能ではなく、シェルの機能です。なので、execlp()でtcpdumpに">"を渡しても、tcpdumpから見れば「この引数は何?」ということになります。 execlp()ではなくsystem()やpopen()ならば内部的にシェル(/bin/sh)を起動していますけど。

arlstumia
質問者

お礼

やっぱりそれしかないですか。 どうもありがとうございました。