前提・実現したいこと
./a.out file command aaa bbb...としたときにC言語の入力の内容(今回ならaaa bbb)をファイルに出力したい
発生している問題・エラーメッセージ
出力の内容が記録されてしまう
ex)ping google.comならgoogle.comでなくpingの実行結果が保存される
該当のソースコード
C
1include<stdio.h> 2#include<stdlib.h> 3#include<unistd.h> 4#include<fcntl.h> 5 6int main(int argc, char *argv[]){ 7 int fd; 8 if((fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC,0644)) < 0){ 9 perror(argv[1]); 10 exit(1); 11 } 12 close(1); 13 dup(fd); 14 close(fd); 15 16 argv[argc] = NULL; 17 char *argv1[argc]; 18 for(int i=0;i<argc-3;i++){ 19 argv1[i] = argv[i+2]; 20 } 21 argv1[argc-3] = NULL; 22 23 execvp(argv1[0], argv1); 24}
試したこと
様々なサイトを調べたが有力な情報は無かった。
補足情報(FW/ツールのバージョンなど)
C(gcc)
ちと質問の意味が不明です
記録されてしまう、とは具体的になにがどうなるんでしょうか。そして、あなたはなにをどうしたいのでしょう。文面からはイマイチイメージが浮かびません
こちらのコードは何を参考にして作ったものでしょうか?参考にしたサイトのURLや書籍名などを提示いただければと思います。
> ex) ping google.comならgoogle.comでなくpingの実行結果が保存される
実際に行われて欲しい内容というのは、 ./a.out ping google.com の場合、
- ping は実行されない(無視される)
- "google.com" という文字列がファイルに記録される
という意図で合っていますか?
./a.out file ping google.com yahoo.co.jp
ならpingが実際に行われ、またgoogle.com yahoo.co.jpという内容がfileというデータに書き込まれるようにしたいです。
そういうときは file ではなくて sample.txt のように書いたほうが伝わりやすいですね…。
pingが行われる、どんな ping が実行される想定ですか?
という具体性の部分でわからないことだらけなので、
./a.out sample.txt ping google.com yahoo.co.jp
を例にして、
- 具体的に(引数になる部分も含めて)どんな ping コマンドが実行される想定か
- 実行後の sample.txt の内容
を質問に書いてください。
- 具体的に(引数になる部分も含めて)どんな ping コマンドが実行される想定か
$ ping google.com
PING google.com (172.217.26.14) 56(84) bytes of data.
--- google.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms
これを実行したいです
- 実行後の sample.txt の内容
google.com yahoo.co.jp
こういう風にしたいです
> 質問に書いてください
質問内容として追記するようにしてください。
上記の例では yahoo.co.jp はどうなるんですか?ファイルに文字列として出力する以外は無視すればいいんでしょうか。
argv[argc] = NULL;
これ、メモリ破壊してませんかね…?
> argv[argc] = NULL;
> これ、メモリ破壊してませんかね…?
C言語の標準では、最後にNULLを置くことになっているので法的に問題はありません。(倫理上問題はありますが。)
意味もわからずコピペしたプログラムの修正方法を質問したということでしょうか?