コードは
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
int
main(int argc, char *argv[])
{
int fd;
if((fd = creat("file.hole", 0777)) < 0)
perror("creat error");
if(write(fd, buf1, 10) != 10)
perror("buf1 write error");
if(lseek(fd, 04000, SEEK_SET) == -1)
perror("lseek error");
if(write(fd, buf2, 10) != 10)
perror("buf2 write error");
exit(EXIT_SUCCESS);
}
によってファイルを読み取る
od -c file.hole
および出力:
0000000 a b c d e f g h i j \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0004000 A B C D E F G H I J
0004012
lseek を削除して file.nohole を作成すると、出力は次のようになります。
0000000 a b c d e f g h i j A B C D E F
0000020 G H I J
0000024
私を混乱させる2つの問題があります。
> 1.At output1, why there are 30 * '\0' after j
> 2.output1: why file ends with 0004012 not 0004010