14

私は、標準入力Cの内容を読み取って出力するテスト プログラムの作成を任されました。

しかし、少し疑問があります。標準入力とは正確には何ですか?

キーボードで入力したものですか?それは私が読まなければならないファイルですか?

両方とも?

そして同じstandard outputことが言えます:それはコンソールですか?ファイル?

4

5 に答える 5

11

C 標準 (C99 や C11 など) は、(適切に-d した<stdio.h>後) 標準ヘッダーから期待されるものを定義します。stdio(3)の man ページ#includeを参照してください。次に、andおよびファイル ハンドル (抽象データ型である some へのポインター) があります。stdinstdoutstderrFILE

stdin一部のデバイス (キーボードなど) に関連するという事実は、実装固有です。

コンピューターを使用する代わりに、たとえば人間の奴隷の部屋を使用して C 標準を実装することもできます (ただし、非倫理的および/または非効率的です)。多くの場合、コンピューターはオペレーティング システムの助けを借りて C 標準の実装を提供します。

C プログラム内で、stdinが「キーボード」なのか、「ファイル」からリダイレクトされたのかを知りたい場合があります。残念ながら、知る限り、それを知るための C99 標準の方法はありません。

あなたが言及したように、、stdinおよびstdout起動stderr時にプログラムで利用できるはずです(つまり、入力した後main....)。したがって、ストリームでない限りfclose、事前の注意を払わずに ( 、 、 、 ... と友達と) 読むことができます (自分で読む必要はありませんstdin) 。getcharscanfgetlinefgetsfscanffopen

Linux またはほとんどの Posix システムでは、概算として使用できます(isatty(STDIN_FILENO)詳細についてはisatty(3)を参照してくださいstdin)。this & thatも参照してください。

于 2013-10-23T11:56:10.867 に答える
1

標準出力(またはstdout) は、Linux やその他の Unix ライクなオペレーティング システムのコマンド ライン プログラム (つまり、すべてテキスト モードのプログラム) によって生成されるデータの標準化されたストリームを指します。

于 2013-10-23T11:37:05.947 に答える
1

stdin はファイル記述子 0 です。次の方法で stdin にファイルを取得できます。

cat file |yourprog
#or
yourprog <file

stdout についても同様 (ファイル記述子 1)

yourprog | someotherprog #pipe your stdout to the stdin of another program
yourprog > somefile #save stdout to a file
yourprog >> somefile #append stdout to a file

および stderr (fd 2)

yourprog 2> errlogfile

ファイルを受け取るが stdin を処理しないプログラムがある場合は、これを行うことで上記の形式を使用できます (入力ファイル引数の場合は -f を想定)。 myprog -f /dev/stdin

//and a horrible example of how not to read from stdin and write to stdout
char buf[4096];
while(write(1,buf,read(0,buf,4096)));
于 2013-10-23T11:52:40.703 に答える