私は、教科書コードを使って穴が開いたファイルを作成し、少し修正しました。しかし、サイズとディスクブロックの点で両ファイルの間に違いは見られないので、何かが間違っていたはずです。穴を持つファイルを作成する
コードABCDEFGHIJ年代の基本的完全なファイルを作成し、私のコード穴(Unixの環境での高度なプログラミング)
#include "apue.h"
#include <fcntl.h>
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
int
main(void)
{
int fd;
if ((fd = creat("file.hole", FILE_MODE)) < 0)
printf("creat error");
if (write(fd, buf1, 10) != 10)
printf("buf1 write error");
/* offset now = 10 */
if (lseek(fd, 16384, SEEK_SET) == -1)
printf("lseek error");
/* offset now = 16384 */
if (write(fd, buf2, 10) != 10)
printf("buf2 write error");
/* offset now = 16394 */
exit(0);
}
でファイルを作成します。
#include "apue.h"
#include <fcntl.h>
#include<unistd.h>
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
int
main(void)
{
int fd;
if ((fd = creat("file.nohole", FILE_MODE)) < 0)
printf("creat error");
while(lseek(fd,0,SEEK_CUR)<16394)
{
if (write(fd, buf1, 10) != 10)
printf("buf1 write error");
}
exit(0);
}
両方のファイルを印刷すると、予想される出力が得られます。しかし、そのサイズは同じです。
{linux1:~/dir} ls -ls *hole
17 -rw-------+ 1 user se 16394 Sep 14 11:42 file.hole
17 -rw-------+ 1 user se 16400 Sep 14 11:33 file.nohole
おそらく16384が小さすぎます。1048576のようなものを試してみてください。 – redneb
これはうまくいきました。おそらく10年前に関連した価値を教科書を使用して私の非常に純粋な提供した...ありがとう。 好奇心が強い人: '259 -rw ------- + 1 user se 1048586 Sep 14 11:56 file.hole 1155 -rw ------- + 1 user se 1048580 Sep 14: 56 file.nohole' – DR29