APUE 第4章: cp命令实现,同时去除文件中的空洞

本文介绍了如何使用C语言编写一个类似于Linux cp命令的程序,该程序能够复制包含空洞的文件,并且在输出时不包含空洞(字节0)。通过分析和实现,详细展示了读取和过滤字节0的过程,最终实现的新文件只包含有效数据。
摘要由CSDN通过智能技术生成

在apue第65页有一个用lseek函数制造文件空洞的程序,贴在下面:

#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)
        err_sys("creat error");

    if(write(fd, buf1, 10)!=10)
        err_sys("buf1 write error");

    if(lseek(fd, 16384, SEEK_SET) == -1)
        err_sys("lseek error");

    if(write(fd, buf2, 10)!=10)
        err_sys("buf2 write error");

    exit(0);
}


lseek指针往后偏移16384个字节,里面都是'\0'.:

linux@linux:~/apue/c4$ od -c ../c3/file.hole
0000000   a   b   c   d   e   f   g   h   i   j  \0  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值