chapter 3 -- file hole 文件的黑洞

来源:互联网 发布:天海佑希 知乎 编辑:程序博客网 时间:2024/06/05 05:47

apue 里介绍了文洞(英文是hole,中文不知道怎么说,我理解为“文件的黑洞”,感觉它挺神秘的,像黑洞一样……),所以做了一个程序来产生一个有黑洞的文件,一个没有黑洞的文件。用法是 

a.out filename1 filename2,filename1 

代表有黑洞的文件名,filename2 代表没黑洞的文件名。注意设计程序的时候这个“黑洞”一定要给得足够大,否则看不见……

所以我的 DELTA 设置为 1000 了,一开始设置为 100,结果 ls -asl  的时候两个文件竟然是一模一样的……


#include <stdio.h>//#include <unistd.h>#include "apue.h"#include "myerr.c"//#include <pwd.h>#include <fcntl.h>#define BUFSIZE11#define DELTA1000intmain (int argc, char *argv[]){int i, fd;charbuf[BUFSIZE] = {"abcdefghij"} ;if (argc != 3)err_quit ("usage: a.out filename1 filename2\n") ;// write a holed fileif ((fd = open (argv[1], O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO)) == -1)err_sys ("holed file open error") ;//printf ("%d\n", fd) ;if (write (fd, buf, 10) != 10)err_sys ("holed file 1 write error") ;if (lseek (fd, 10 * DELTA, SEEK_SET) == -1)err_sys ("holed file lseek error") ;if (write (fd, buf, 10) != 10)err_sys ("holed file 2 write error") ;close (fd) ;// write a no hole fileif ((fd = open (argv[2], O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO)) == -1)err_sys ("noholed file open error") ;if (write (fd, buf, 10) != 10)err_sys ("noholed file 1 write error") ;for (i = 0 ; i < DELTA ; ++i) {if (write (fd, buf, 10) != 10)err_sys ("noholed file 2 write error") ;}close (fd) ;    exit (0) ;}