文件IO 2024-8-8课后练习

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值