读书人

《UNIX环境高级编程》札记-read函数

发布时间: 2013-09-10 13:42:18 作者: rapoo

《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
1.read函数调用read函数从文件去读数据,函数定义如下:

#include <fcntl.h>#include <stdio.h>int main(void){        int fd,byteNum,result;        char wbuf[10] = "123456789";        char rbuf[10];        if((fd = open("./a.txt", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR))<0){                perror("open");                return -1;        }        if((byteNum = write(fd, wbuf, 10))<0){                perror("write");                return -1;        }        if((result = lseek(fd, 40960, SEEK_END))<0){                perror("lseek");                return -1;        }        if((byteNum = write(fd, wbuf, 10)) < 0){                perror("write");                return -1;        }        close(fd);        return 0;}
运行结果:-rw------- 1 root root 40980 2013-09-09 15:03 a.txt使用od命令查看文件内容:root@virtual-machine:~# od -c a.txt
0000000 1 2 3 4 5 6 7 8 9 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0120000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 1 2 3 4 5 6
0120020 7 8 9 \0
0120024空洞的内容全部置为0
查看下文件占用的磁盘大小:8 -rw------- 1 root root 40980 2013-09-09 15:41 a.txt
文件虽然有40980个字节,只占用了8个block,即8K(这边的block不是文件系统的block,而是kernel block,linux中,kernel block大小为1K),如果是没有空洞的文件,则占用磁盘大小应该是44K。可见,虽然有空洞,但是实际存储时没有占用文件大小的磁盘空间。

读书人网 >编程

热点推荐