C言語のread関数の使い方は?

C言語では、read 関数はファイルディスクリプタからデータをよみとるのに使われます。そのプロトタイプは次のようになります。

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

パラメーターの説明を記述します:

  1. fd: ファイルディスクリプタを表す。標準入力(0)、標準出力(1)、標準エラー(2)のいずれか、またはopen関数やsocket関数から返されるファイルディスクリプタ。
  2. buf:データを受け取るためのバッファーを指定します。
  3. count:要读取的字节数。

戻り値の説明:

  1. -1 が返された場合は、読み込みエラーが発生しています
  2. 0が返された場合、ファイルは末尾に達していて、これ以上読み取れるデータがありません。
  3. 0より大きい値を返します。実質的に読み取られたバイト数を表しています。

使い方:

#include <stdio.h>
#include <unistd.h>

int main() {
    int fd;   // 文件描述符
    char buf[1024];   // 缓冲区
    ssize_t numRead;   // 读取到的字节数

    // 打开文件(如果是读取文件数据)
    // fd = open("file.txt", O_RDONLY);

    // 从标准输入读取数据
    fd = 0;

    // 读取数据
    numRead = read(fd, buf, sizeof(buf));

    // 判断读取结果
    if (numRead == -1) {
        // 读取失败
        perror("read");
    } else if (numRead == 0) {
        // 文件已经读取到末尾
        printf("End of file\n");
    } else {
        // 读取成功,输出读取到的数据
        printf("Read %ld bytes: %s\n", numRead, buf);
    }

    // 关闭文件(如果是读取文件数据)
    // close(fd);

    return 0;
}

read関数はブロッキング関数なので、データの読み取りが終わるまで、またはエラーが発生するまでずっと待機します。読み取りのタイムアウトを設定する必要がある場合は、select関数を使用するか、またはファイル記述子をノンブロッキングにする必要があります。

bannerAds