8.8作业

1.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
	//实现cat

		if(argc < 2)
		{
			printf("请输入至少一个文件的路径名\n");
		}
		
		char buf[100]={0};
		
		for(int i = 1;i < argc;i++)
		{
		
			int fd=open(argv[i],O_RDONLY);
			
			while(1)
			{
				memset(buf,0,sizeof(buf));
				int n = read(fd,buf,sizeof(buf));
				if(0 == n)   
				{
					break;
				}
				
				printf("%s\n",buf);
			}
			
			close(fd);
		
		}
	
	return 0;
}

2.

#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,char **argv)
{
	printf("argc=%d\n",argc);
	
	if(argc != 3)
	{
		printf("请输入两个参数\n");
		return -1;
	}
	
	int fd1 = open(argv[1], O_RDWR);
	if(-1 == fd1)
	{
		printf("打开失败,错误为%s\n",argv[1],strerror(errno));
	}

	
	int fd2 = open(argv[2], O_RDWR | O_CREAT,0777);
	if(-1 == fd2)
	{
		printf("打开失败,错误为%s\n",argv[2],strerror(errno));
	}
	
	char buf[100];
	while(1)
	{
		memset(buf,0,100);
		int ret = read(fd1,buf,sizeof(buf)-1);
		
		write(fd2,buf,strlen(buf));
		
		if(0 == ret)
		{
			break;
		}
		
	}
		
	close(fd1);
	close(fd2);
															
}

3.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
#define DUQUDAXIAO 100
 
int main(int count, char** strarr)
{
	//判断参数个数是否输入正确
	if (count != 3)
	{
		printf("请输入两个参数即可\n");
		return -1;
	}
	//打开文件
	int fp1 = open(strarr[1], O_RDONLY);
	if (fp1 == -1)  //判断文件是否打开成功
	{
		printf("打开%s文件失败!\n失败原因:%s\n", strarr[1], strerror(errno));
		return -1;
	}
	int fp2 = open(strarr[2], O_RDONLY);
	if (fp2 == -1)  //判断文件是否打开成功
	{
		printf("打开%s文件失败!\n失败原因:%s\n", strarr[2], strerror(errno));
		return -1;
	}
	//读取两个文件并且比较
	while (1)
	{
		char arr1[DUQUDAXIAO], arr2[DUQUDAXIAO];
		memset(arr1, 0, DUQUDAXIAO);//将arr清零
		memset(arr2, 0, DUQUDAXIAO);//将arr清零
		//执行读操作
		int sizeRead1 = read(fp1, arr1, DUQUDAXIAO - 1);
		if (sizeRead1 == -1)//判断文件是否读取成功
		{
			printf("读取%s文件失败\n失败原因是:%s", strarr[1], strerror(errno));
			return -1;
		}
		int sizeRead2 = read(fp2, arr2, DUQUDAXIAO - 1);
		if (sizeRead2 == -1)//判断文件是否读取成功
		{
			printf("读取%s文件失败\n失败原因是:%s", strarr[2], strerror(errno));
			return -1;
		}
		if (strcmp(arr1, arr2) != 0)
		{
			printf("这两个文件的内容不同\n");
 
			break;
		}
		else if (sizeRead1 != DUQUDAXIAO - 1 || sizeRead2 != DUQUDAXIAO - 1)
		{
			printf("这两个文件的内容相同\n");
			break;
		}
	}
    //关闭文件
    close(fp1);
    close(fp2);
 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值