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
...
...