Unix环境高级变成习题4.6

#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>


int IsHoleBlock(char *buf,int len)
{
	int i;
	for(i=0;i<len;i++)
	if(buf[i]!=0)
		return 0;
	return 1;
}

int main(int argc,char *argv[])
{
int sourcefd,destfd;
ssize_t nread;
ssize_t nwrite;
char *buf;
size_t len = 1;
struct stat st;

if(argc!=3)
{
	printf("usage: ./a.out <source filename> <destfilename>\n");
	return -1;
}

//if(fstat(sourcefd,&st)<0)
//{
//	printf("stat error\n");
//	return -1;
//}
//else
//{
//	len = st.st_blksize;
//}

if((sourcefd=open(argv[1],O_RDONLY))<0)
{
	printf("can't open source file\n");
	return -1;
}

if((buf=(char *)malloc(len))==NULL)
{
	printf("malloc error\n");
	return -1;
}

//if((destfd=creat(argv[2],O_WRONLY))<0)
if((destfd=open(argv[2],O_RDWR|O_CREAT|O_TRUNC))<0)
{
	printf("ceate file error\n");
	return -1;
}

while((nread=read(sourcefd,buf,len))>0)
{
if(!IsHoleBlock(buf,len))
	if((nwrite=write(destfd,buf,nread))<0)
		{
		printf("write error\n");
		exit(-1);
		}
}

if(nread<0)
{
	printf("read error\n");
	exit(-1);
}

free(buf);
close(sourcefd);
close(destfd);
return 0;
}












编写一个类似cp的程序,它复制包含空洞的文件,但不讲字节0写到输出文件中去



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值