Linux之文件拆分与合并
2022/3/20 7:33:52
本文主要是介绍Linux之文件拆分与合并,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
拆分:
将Linux下的文件拆分为多个1MB的小文件,便于发送与上传等操作
拆分所使用到的函数与结构体:
umask(int);//用于读写文件后的权限问题
struct stat s_buf;//用于保存文件信息
stat(const char *, stat *);//将路径中的文件信息保存到stat结构体中
S_ISREG(stat.st_mode);//判断是否为文件,若为文件,则返回1,否则返回0
ceil(float);//向上取整,用于判断要拆分多少个文件
主要操作流程:
先读取文件路径,判断所给的是否为文件,若为文件则获取文件大小,除以1MB,判断拆分文件的个数;
然后打开读取文件,使用while循环,创建子进程,在子进程中写文件数据,父进程用while循环逐个等待子进程的结束,避免出现僵尸进程
以下为代码:
//将文件拆分到指定路径 int SplitFile(string filepath,string tofilepath) { int count;//已拆分的文件个数 int size = 0;//预计拆分的文件个数 int readfd = 0;//读文件 int writefd = 0;//写文件 int resbuf = 0;//读到的字符数 char buf[102400] = { 0 };//每个文件的大小 int num = 1;//拆分文件的文件名序号 string writePath;//拆分生成的文件名 int pid = 0;//子进程的pid int res = 0;//父进程接收到的子进程pid int status = 0;//接收到子进程完成所返回的信息 struct stat s_buf;//文件信息 umask(0); stat(filepath.c_str(), &s_buf); if (!S_ISREG(s_buf.st_mode)) {//不是文件,直接结束 cout << "所给的路径并非文件路径,函数结束" << endl; return -1; } cout << "需要拆分的文件大小为:" << s_buf.st_size << endl; size = ceil(float(s_buf.st_size / 102400.00));//计算需要拆分文件的个数,向上取整 cout << "需要拆分的文件个数为:" << size << endl; readfd = open(filepath.c_str(), O_RDONLY, 0777); if (read < 0) { perror("文件读取失败"); return -1; } else { while ((resbuf = read(readfd, buf, sizeof(buf))) > 0) { writePath = tofilepath + to_string(num) + ".tmp"; cout << "写路径:" << writePath << endl; num++; pid = fork(); if (pid == 0) {//子进程做拆分 writefd = open(writePath.c_str(), O_CREAT | O_WRONLY, 0777); int res = write(writefd, buf, resbuf); if (res > 0) { close(writefd); bzero(buf, sizeof(buf)); writePath.clear(); } else { perror("读取失败"); } exit(0); } else if (pid > 0) { } } //父进程 while (count < size) { res = wait(&status); if (res > 0) { //cout << "res=" << res << "拆分完毕" << endl; count++; } } cout << "所有拆分完毕" << endl; return 0; } }
这篇关于Linux之文件拆分与合并的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法