|
≫ |
|
|
|
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)
ファイルからバイトを読み込み,それらをバッファに格納します。
形式
#include <unistd.h>
ssize_t read (int file_desc, void *buffer, size_t nbytes); (ISO POSIX-1)
int read (int file_desc, void *buffer, int nbytes); (Compatability)
引数
file_descファイル記述子。指定されるファイル記述子は,現在読み込みのためにオープンされているファイルを参照していなくてはなりません。
buffer入力データが格納される連続したストレージのアドレス。
nbytes読み込み操作に関わるバイト数の上限。
説明
read関数は,読み込んだバイトの数を返します。戻り値は必ずしも nbytes に等しくはなりません。たとえば,入力がターミナルからである場合には,たかだか 1 行分の文字しか読み込まれません。
| 注意
read関数はレコード・ファイルの中のレコード境界を越えないため,たかだか 1 つのレコードしか読み込みません。各レコードに対し,個別に読み込みを行う必要があります。
|
戻り値
n
|
読み込まれたバイト数。
|
-1
|
読み込みエラーを示します。物理的な入力エラー,不正なバッファ・アドレス,保護違反,未定義のファイル記述子などの理由が考えられます。
|
例
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
main()
{
int fd,
i;
char buf[10];
FILE *fp ; /* Temporary STDIO file */
/* Create a dummy data file */
if ((fp = fopen("test.txt", "w+")) == NULL) {
perror("open");
exit(1);
}
fputs("XYZ\n",fp) ;
fclose(fp) ;
/* And now practice "read" */
if ((fd = open("test.txt", O_RDWR, 0, "shr=upd")) <= 0) {
perror("open");
exit(0);
}
/* Read 2 characters into buf. */
if ((i = read(fd, buf, 2)) < 0) {
perror("read");
exit(0);
}
/* Print out what was read. */
if (i > 0)
printf("buf='%c%c'\n", buf[0], buf[1]);
close(fd);
}
|
|