No.2ベストアンサー
- 回答日時:
まず「コマンドラインでは、'$ wc filename | program' とすればprogramの引数として値が渡りますが」と書かれていますが, これは wc filename の標準出力を program の標準入力に渡すということであって, 「引数として渡す」ということではありません.
で本題ですが.... 「popenを使うと、書き込み用プロセスと読み込みようプロセスを立ち上げることになり、一見簡単そうで複雑なコードになりませんか?」というのは, ちょっと意味がわかりません. popen の仕様は確認しましたか?
popen を使えば, プログラムの標準入出力をあたかもファイルであるかのように扱うことができます (もちろん普通のファイルと違って入出力を同時に実行することはできませんが). だから, 「ファイルから読み込む」のとほぼ同等の複雑さで「プログラムの標準出力を読み込む」ことができます.
この回答への補足
ご回答、ありがとうございます。
それって、こんな感じですよね。
#include <stdio.h>
char *wc = "wc file";
main()
{
FILE *inpipe, *popen();
char buf[BUFSIZ];
inpipe = popen(wc, "r");
while (fgets(buf, sizeof buf, inpipe) != NULL) {
buf[strlen(buf)-1] = ' ';
fputs(buf, stdout);
}
printf("\n");
pclose( inpipe );
exit(0);
}
No.4
- 回答日時:
標準入力にだしながら、標準出力の結果を受け取るというのは
pipe(),fork()あたり使ったりして結構めんどくさいでしょうから、
どうしても、wcをコールしたいのなら、一旦、wcの標準入力にいれたいものをファイルに書いてから、popen ( "wc < ファイル" , "r");
すればいいのではないでしょうか。
ファイルの掃除とか、他のプロセスとファイルがぶつからないようにするとか考えないといけませんけど。
この回答への補足
ありがとうございます。
戴いた案は、私も考えましたが、同じようにファイルの後処理とかを複数回行わなければならず、処理がぶつかりそうなので断念しました。
No.1
- 回答日時:
それは「wc の返り値」をもらってるだけで, 「wc の出力」をもらっているわけではありません.
UNIX&Linux 限定なら popen が簡単かな.
この回答への補足
ご回答、有難うございます。
popenを使うと、書き込み用プロセスと読み込みようプロセスを立ち上げることになり、一見簡単そうで複雑なコードになりませんか?
私がこのコマンド("wc")を使おうと思ったのは、既にあるコマンド(機能)でCのライブラリ関数の中に組み込めるのでは?と思ったからです。
コマンドラインでは、'$ wc filename | program' とすればprogramの引数として値が渡りますが、実行中のプログラムで、且つ、一つの関数(サブルーチン)の中で実現したいと思います。しかも、出来るだけシンプルに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルに改行コード...
-
ファイル出力の場所を指定
-
VC++でUTF-8のファイルを出力し...
-
フォルダにあるPDF情報の抽出(VBA)
-
アクセス>マクロ>テキスト変換
-
ファイル形式またはファイル拡...
-
外国語とCSVについて
-
printfだと出力されるのにfprin...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
ファイルI/O完了待ち
-
MATLABのCSV形式での書き込みに...
-
FORTRANの出力データの左寄せが...
-
コマンド(例えばls)の出力結果...
-
pLaTeX の EPSファイル読み込み...
-
離散フーリエ変換をC言語でど...
-
C++ fprintf_sの使い方がわからん
-
COBOLのファイル出力
-
C言語でBMP画像(ファイル)は...
-
pcap形式データをテキストへ抽出
-
gccによって、BOM付きのUTF-8で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
ファイル出力の場所を指定
-
VC++でUTF-8のファイルを出力し...
-
テキストファイルに改行コード...
-
シェルコマンドの 2>&1 とはど...
-
Acccess レポートをグループ別...
-
Wordマクロで指定したフォルダ...
-
二次元配列をクリップボードに...
-
ファイル形式またはファイル拡...
-
CreateProcess関数と実行後の戻...
-
fortranのtxtファイル出力書式...
-
サウンド出力のデバイスを選択...
-
VBA でメモ帳へ保存する際の保...
-
1行ずつではなくまとめてファイ...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
C++ fprintf_sの使い方がわからん
-
ファイルの文字コードをUTF-8に...
-
pLaTeX の EPSファイル読み込み...
-
AccessVBA複数レポート条件毎に...
-
標準出力とファイルに効率的に...
おすすめ情報