/*2010-09-14*/
/*1 实现一个mycp,功能如同cp
例如: ./mycp /etc/passwd /tmp/passwd*/
/*
*打开要被复制的文件1,同时创建一个新的文件2,读文件1到BUF,然后将BUF的内
*容写到文件2
* */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char** argv)
{
if(argc!=3)
{
perror("argc");
exit(1);
}
int fd1,fd2;
int ret=1;
char buf[100];
fd1=open(argv[1],O_RDONLY);
if(fd1==-1)
{
perror("open");
exit(1);
}
fd2=creat(argv[2],0655);
if(fd2==-1)
{
perror("creat");
exit(1);
}
while(1)
{
if(ret==0)
break;
ret=read(fd1,buf,99);
write(fd2,buf,ret);//一边读一边写,(ret)读多少就写多少
}
// write(fd2,buf,ret);//不能写在这?!
close(fd1);
close(fd2);
return 0;
}
/*2010-09-14*/
/*删除文件里面的特定字符*/
/***************************************************************
*实现删除文件里面的特定字符,比如将某文件的第6,7个字符删除掉
*
* 思路:1、创建一个临时文件 2、用lseek()直接跳过要删除的部分
* ************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char** argv)
{
if(argc!=2)
{
fprintf(stderr,"wrong usage...");
exit(1);
}
int fd1,fd2,fd3;
int ret;
int dn=5;
char buf[100];
fd1=open(argv[1],O_RDWR);//注意:要以O_RDWR方式打开!
if(fd1==-1)
{
perror("open");
exit(1);
}
fd2=open("copy.txt",O_RDWR | O_CREAT |O_TRUNC, 0644);//作为临时文件
if(fd2==-1)
{
perror("creat");
exit(1);
}
ret=read(fd1,buf,dn);
write(fd2,buf,ret);//先将要删除位置之前的数据存到临时文件中
lseek(fd1,2,SEEK_CUR);//直接跳过要删除的那两个数
while(1)
{
ret = read(fd1, buf, 100);
if (ret == 0)
break;
write(fd2, buf, ret); //将要删除位置后面剩下的数据存到临时文件中
}
lseek(fd1,0,SEEK_SET);//让文件指针回到开始处
lseek(fd2,0,SEEK_SET);
ret=1;
while(1)//将临时文件的内容写回到原来的文件中
{
ret = read(fd2, buf, 100);
if (ret == 0)
break;
write(fd1, buf, ret);
}
sleep(5);//用来测试copy.txt
close(fd2);
unlink("copy.txt");
close(fd1);
return 0;
}