私はSTDINと言うとき、私はストリームを参照していますが= 0stdinはLinuxの文字デバイスとして扱われますか?
fdで、私はブロックと文字のデバイスをカバーしてOSのコースを取っています言及しました。具体的には、キーボードは文字デバイスであると言われています。しかし、read
システムコールが表示されたとき、カーネルはブロックデバイスまたはブロックデバイス上のファイルであれば、カーネルはそれが何を読み込んでいるか気にしませんでした。私の質問がある
#include <stdlib.h>
#include <unistd.h>
const int BUFFSIZE = 5;
int main() {
int fd, n;
char buffer[BUFFSIZE];
int stdin = 0;
int stdout = 1;
int stderr = 2;
do {
n = read (0, buffer, BUFFSIZE);
if (n < 0) {
write (stderr, "Error occurred\n", 10);
} else {
write (stdout, "Entered if\n", 20);
write (stdout, buffer, n);
}
} while (n > 0);
return 0;
}
:どのようにLinuxは、標準入力(FD = 0)の治療ん
これは、我々が与えられたコードのですか?キャラクターデバイスとして扱われているのか、カーネルは何らかのバッファリングをしています(これはコードを実行したときの結果で判断すると思われます)。
さらに、私が使用できるかどうかを知ることは有用でしょう文字デバイスから一般に読み込むためのシステムコールです。もしそうなら、入力はバッファされていますか?
'stdin'は*デバイス*ではなく*ストリーム*です。 –
_ "カーネルは、ブロックデバイスまたはブロックデバイス上のファイルであれば、何を読み込んでいるか気にしません。" _これは正しくはありません。ファイルシステムのどこにでも関連するファイルを持たないファイルディスクリプタ(ソケット、名前のないパイプ、 'signalfd's、' eventfd's、 'epoll'ディスクリプタなど)がいくつかあります。重要なことは、ファイル記述子を持っていて、読み込みをサポートしていることです。 –
@PaulRありがとう!コメントを編集しました:) –