完成linux文件编程的初步学习后,使用linux文件编程实现了一两个简单应用。
1.对文件内容进行修改
目标效果
模拟配置文件的参数修改
代码
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv) //输入文件名、目标字段、修改值
{
if(argc != 4){
printf("error!\n");
exit(-1);
}
//打开文件
int fd;
fd = open(argv[1],O_RDWR);
//计算文件大小
int size = lseek(fd,0,SEEK_END);
lseek(fd,0,SEEK_SET);
//读文件
char *buf = (char *)malloc(size);
read(fd,buf,size);
//寻找目标字段
char *p = strstr(buf,argv[2]);
if(p == NULL){
printf("There is no such field!\n");
exit(-1);
}
p = p + strlen(argv[2]);
*p = *argv[3];
//修改
lseek(fd,0,SEEK_SET);
write(fd,buf,size);
//关闭文件
close(fd);
return 0;
}
运行结果
配置文件初始内容
命令行输入
./a.out test.config abc= 9
最终结果
2.实现cp命令
目标效果
具备cp命令相同的效果
代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char **argv) //输入初始文件名和目的文件名
{
int fd_1;
int fd_2;
if(argc != 3){
printf("error\n");
exit(-1);
}
//打开初始文件、创建目的文件
fd_1 = open(argv[1],O_RDWR);
fd_2 = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
//计算初始文件大小
int size = lseek(fd_1,0,SEEK_END);
//读初始文件
char *buf;
buf = (char *)malloc(size);
lseek(fd_1,0,SEEK_SET);
read(fd_1,buf,size);
//将初始文件内容写入目的文件
write(fd_2,buf,size);
//关闭文件
close(fd_1);
close(fd_2);
return 0;
}