write & read
write, read両方共失敗した場合 -1 (EOF) を返します.
#include<unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
次のプログラムは, 標準入力された文字列を改行まで読み込み, それを無限に繰り返すプログラムです."write"の第一引数に1, "read"の第一引数に0, が入っているのは
標準入力 STDIN_FILENO 0
標準出力 STDOUT_FILENO 1
標準エラー出力 STDERR_FILENO 2
"unistd.h"内部に上の3つが定義されているからです.
プログラムの終了にはCtrl+Cを押してください.
/* stdrw */
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define BUFFSIZE 4096
#ifdef EOF
#define EOF (-1)
#else
#define EOF (-1)
#endif
int main(int argc, char **argv)
{
int n;
char buff[BUFFSIZE];
while(1) {
if((n = read(0, buff, BUFFSIZE)) == EOF) {
perror("read");
exit(1);
}
if(write(1, buff, n) == EOF) {
perror("write");
exit(1);
}
}
return 0;
}
$ ./stdrw
Message
Message
...
...