ファイルの終端になっても-1を返してくれないようで悩んでいます。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd;
char buff[10];
if (argc < 2) {
fprintf(stderr, "usage: *.exe filename\n");
exit(EXIT_FAILURE);
}
if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror("open(): ");
exit(EXIT_FAILURE);
} else {
while (read(fd, buff, 5) != -1) {
printf("printf(): %s\n", buff);
// check null character
if (buff[5] == '\0') {
puts("null character is ok.");
} else {
printf("buff[5] = %d\n", buff[5]);
}
}
close(fd);
}
return 0;
}
ファイルの終端までディスクリプタを進めたら-1を返してくれると思うのですが
どうして同じ場所を何度も読み込んでいるのでしょうか。
またread()で代入した文字列は手動でナル文字を入れる必要があると
とあるサイトでは説明されているのですが、
ここでは何もしなくてもナル文字が入っているようなのですがどうしてでしょうか?
「buff[rc] = '\0';」でread()関数で読み込んだ配列の最後に'\0'を書き込む必要があります。 文字列の最後には'\0'が必要なためです。
これを行わないとprintf()関数などで文字列として表示できません。
http://www.orchid.co.jp/computer/cschool/CREF/read.html