C言語のread関数の使い方は?
C言語では、read 関数はファイルディスクリプタからデータをよみとるのに使われます。そのプロトタイプは次のようになります。
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
パラメーターの説明を記述します:
- fd: ファイルディスクリプタを表す。標準入力(0)、標準出力(1)、標準エラー(2)のいずれか、またはopen関数やsocket関数から返されるファイルディスクリプタ。
- buf:データを受け取るためのバッファーを指定します。
- count:要读取的字节数。
戻り値の説明:
- -1 が返された場合は、読み込みエラーが発生しています
- 0が返された場合、ファイルは末尾に達していて、これ以上読み取れるデータがありません。
- 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関数を使用するか、またはファイル記述子をノンブロッキングにする必要があります。