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