chapter 3 -- file hole 文件的黑洞
程序员文章站
2022-07-01 16:36:55
...
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 BUFSIZE 11 #define DELTA 1000 int main (int argc, char *argv[]) { int i, fd; char buf[BUFSIZE] = {"abcdefghij"} ; if (argc != 3) err_quit ("usage: a.out filename1 filename2\n") ; // write a holed file if ((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 file if ((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) ; }
上一篇: 扇贝怎么洗,原来这么简单