Я пытался создать файл с отверстием, используя код учебника, и немного изменил его. Однако, должно быть, что-то пошло не так, поскольку я не вижу разницы между обоими файлами с точки зрения размера и блоков диска.Создание файла с отверстием
код, чтобы создать файл с отверстием (Advanced Программирование в 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);
}
Мой код, создание файла в основном полный ABCDEFGHIJ годов.
#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 пользователь se 1048586 14 сен 11:56 file.hole 1155 -rw ------- + 1 пользователь se 1048580 14 сен 11: 56 file.nohole' – DR29