Linux——open函数、read函数、write函数简单封装使用

问题1:利用读写特性,write写入某个数据之后,将其read读取出来


  • WR.c 源代码
//打开文件
#include 
#include 
#include 
//读写,关闭
#include 

//打开文件	
int openFile(const char* filePath);

//读取文件
void readFile(int fd);

//写入数据
int writeFile(int fd, char* str);

//将光标移到起始位置
int backToStart(int fd);

//写入数据并读取数据
int WRFile(const char* filePath, const char* dataSource);

int main(void){
     
	//写入数据并读取
	WRFile("1.txt", "this is a test data");
	
	return 0;
}

//打开文件	
int openFile(const char* filePath){
     
	printf("正在打开%s文件····\n\n",filePath);
	int fd = open(filePath, O_RDWR);
	if(fd == -1){
     
		perror("打开失败!\n\n");
		return -1;
	}
	printf("打开成功 !\n\n");

	return fd;
}


//读取文件
void readFile(int fd){
     
	char c[2] = {
     0};
	int flag = 1;
	printf("正在读取····\n\n");
	do{
     
		flag = read(fd, c, sizeof(c)-1);
		if(flag > 0){
     
			printf("%s", c);
		}

	}while(flag);
	printf("\n\n读取成功 !\n\n");
}

//写入数据
int writeFile(int fd, char* str){
     
	printf("正在写入····\n\n");

	printf("%s\n\n",str);
	int w = write(fd, str, strlen(str));
	printf("写入成功 !\n\n");
	return w;
}


//将光标移到起始位置
int backToStart(int fd){
     
	return lseek(fd, 0, SEEK_SET);
}

//写入数据并读取数据
int WRFile(const char* filePath, const char* dataSource){
     

	//打开文件
	int fd = openFile(filePath);

	//写入数据
	writeFile(fd,dataSource);
	
	//将光标移到起始位置
	backToStart(fd);
	
	//读取文件到屏幕
	readFile(fd);

	close(fd);
}
  • 编译代码
even@ubuntu:~/Desktop/shared/day05$ ls
1.txt  2.txt  CopyFile.c  WR.c
even@ubuntu:~/Desktop/shared/day05$ gcc WR.c -o main1
  • 测试

even@ubuntu:~/Desktop/shared/day05$ ./main1 
正在打开1.txt文件····

打开成功 !

正在写入····

this is a test data

写入成功 !

正在读取····

this is a test data

读取成功 !

even@ubuntu:~/Desktop/shared/day05$ 

  • 查看 1.txt 文件内容
this is a test data

问题2:实现复制功能,将文件1的数据复制到文件2中


  • CopyFile.c 源代码
//打开文件
#include 
#include 
#include 
//读写,关闭
#include 

//打开文件	
int openFile(const char* filePath);

//得到文件大小
int getFileSize(int fd);

//拷贝文件1到文件2
int copyFile(const char* sourceFile, const char* targetFile);


int main(void){
     
	//将1.txt文件内容拷贝到2.txt文件
	copyFile("1.txt","2.txt");

	return 0;
}

//打开文件	
int openFile(const char* filePath){
     
	printf("正在打开%s文件····\n\n",filePath);
	int fd = open(filePath, O_RDWR);
	if(fd == -1){
     
		perror("打开失败!\n\n");
		return -1;
	}
	printf("打开成功 !\n\n");

	return fd;
}


//得到文件大小
int getFileSize(int fd){
     
	//得到文件大小
	int size = lseek(fd, 0, SEEK_END);
	lseek(fd, 0, SEEK_SET);
	return size;
}



//拷贝文件1到文件2
int copyFile(const char* sourceFile, const char* targetFile){
     
	//打开源文件和目标文件
	int sourFD = openFile(sourceFile);
	int targFD = openFile(targetFile);

	//暂存数据
	int fileSize = getFileSize(sourFD) + 1;
	char str[fileSize];

	printf("正在读取数据源··· \n\n");
	//读取数据
	read(sourFD, str, sizeof(str));
	printf("%s\n\n",str);
	printf("读取成功 !\n\n");


	printf("正在写入目标源··· \n\n");
	//写入目标源
	printf("%s\n\n",str);
	write(targFD, str, strlen(str));
	printf("写入成功 !\n\n");

	//关闭
	close(sourFD);
	close(targFD);
}
  • 编译代码
even@ubuntu:~/Desktop/shared/day05$ ls
1.txt  2.txt  CopyFile.c  main1  WR.c
even@ubuntu:~/Desktop/shared/day05$ gcc CopyFile.c -o main2
even@ubuntu:~/Desktop/shared/day05$ 
  • 测试
even@ubuntu:~/Desktop/shared/day05$ ./main2
正在打开1.txt文件····

打开成功 !

正在打开2.txt文件····

打开成功 !

正在读取数据源··· 

this is a test data


读取成功 !

正在写入目标源··· 

this is a test data


写入成功 !

even@ubuntu:~/Desktop/shared/day05$ 
  • 查看 1.txt 文件内容
this is a test data
  • 查看 2.txt 文件内容
this is a test data

参考文档

你可能感兴趣的:(其他,#,Linux,linux)