1.mycat
#include <stdio.h>//标准IO的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i,fd1;
char buf[20]={0};
if(argc<2)
{
printf("请至少给我一个文件路径\n");
return -1;
}
for(i=1;i<argc;i++)
{
fd1=open(argv[i],O_RDONLY);
if(-1==fd1)
{
perror("打开文件失败:");
return -1;
}
while(1)
{
memset(buf,0,sizeof(buf));
ssize_t set = read(fd1,buf,sizeof(buf)-1);
printf("%s",buf);
if(0==set)
{
break;
}
}
close(fd1);
}
return 0;
}
2.mycpy
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
if(3!=argc)
{
printf("错误,一次只能复制一份文件,请重新输入");
return -1;
}
int fd1=open(argv[1],O_RDWR);
if(-1==fd1)
{
printf("打开%s失败,错误为%s\n",argv[1],strerror(errno));
}
int fd2=open(argv[2],O_RDWR|O_CREAT,0777);
if(-1==fd2)
{
printf("打开%s失败,错误为%s\n",argv[2],strerror(errno));
}
char buf[100]={0};
while(1)
{
memset(buf,0,sizeof(buf));
ssize_t set =read(fd1,buf,sizeof(buf)-1);
write(fd2,buf,strlen(buf));
if(0==set)
{
break;
}
}
close(fd1);
close(fd2);
return 0;
}
3.mydiff
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
int fd1=open(argv[1],O_RDONLY);
if(-1 == fd1)
{
printf("打开%s失败,错误为%s\n",argv[1],strerror(errno));
return -1;
}
int fd2=open(argv[2],O_RDONLY);
if(-1 == fd2)
{
printf("打开%s失败,错误为%s\n",argv[2],strerror(errno));
return -1;
}
off_t a=lseek(fd1,0,SEEK_END);
off_t b=lseek(fd2,0,SEEK_END);
if(a!=b)
{
printf("文件大小不相同");
return -1;
}
char buf[20]={0};
char buf1[20]={0};
lseek(fd1,0,SEEK_SET);
lseek(fd2,0,SEEK_SET);
if(argc!=3)
{
printf("请至需要两个文件路径");
return -1;
}
while(1)
{
memset(buf,0,sizeof(buf));
memset(buf1,0,sizeof(buf1));
ssize_t set=read(fd1,buf,sizeof(buf)-1);
ssize_t set1=read(fd2,buf1,sizeof(buf)-1);
if(strcmp(buf,buf1)!=0)
{
printf("文件内容不相同");
return -1;
}
if(0==set)
{
break;
}
}
printf("相同\n");
close(fd1);
close(fd2);
return 0;
}