前提・実現したいこと
c言語で./a.out arg1 arg2...とすればping -c 3 arg1, ping -c 3 arg2,...と実行するプログラムを作っています。
第二引数以降の結果も表示させたいのですが、第一引数の結果しか表示させられません。どう改良すべきでしょうか。
実行結果
./a.out red01 red02 PING red01 (xxx.xx.xx.x) 56(84) bytes of data. 64 bytes from red01 (172.21.93.1): icmp_seq=1 ttl=64 time=0.851 ms 64 bytes from red01 (172.21.93.1): icmp_seq=2 ttl=64 time=1.08 ms 64 bytes from red01 (172.21.93.1): icmp_seq=3 ttl=64 time=0.944 ms --- red01 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.851/0.959/1.084/0.102 ms
該当のソースコード
c言語
1#include <stdio.h> 2#include <unistd.h> 3 4int main(int argc,char *argv[]){ 5 int i; 6 argv[argc]=NULL; 7 for(i=1;argv[argc]!=NULL; i++){ 8 execl("/bin/ping", "ping", "-c", "3", argv[i]); 9 } 10}
execl はプロセス自体をそのコマンドに変えてしまうと思いますが、どこまでご理解されていますでしょうか。
質問の内容とは直接関係ないですが、
> argv[argc]=NULL;
こんなことしちゃダメでしょう、と。何か参考にされたコードがあったのでしょうか。
>jimbe様
ping -c 3 を実行するプログラムを作りたくてネットにあったコードを参照して書いてみました、、
>dodox86様
友達の書いたコードを参照しました、、。なぜダメなのか教えていただけないでしょうか。
> ネットにあったコードを参照
でしたら、 execl についてもお調べになることをお勧めします。
>ありがとうございます!!
最後の引数にNULLが必要なのですね!また複数のプログラムを実行したい場合はforkシステムコールが必要だとわかりました。もう一度考えてみます。