linux函数实现rm
需求是想实现一个删除文件或目录的功能,类似于 rm -rf 的功能,但我们知道的删除函数如unlink,remove,rmdir都不能删除非空目录,而如果使用system()来实现会开多余的进程,消耗多余的资源,所以尽量不要使用system()函数。需要写一个函数实现,借用这位博主的代码实现这个功能。转自:http://www.cnblogs.com/StartoverX/p/4600866.html
int RmDir(std::string DirFullPath)
{ DIR* dirp = opendir(DirFullPath.c_str()); if(!dirp){return -1;}struct dirent *dir;struct stat st;while((dir = readdir(dirp)) != NULL){if(strcmp(dir->d_name,".") == 0|| strcmp(dir->d_name,"..") == 0){continue;} std::string SubPath = DirFullPath + '/' + dir->d_name;if(lstat(SubPath.c_str(),&st) == -1){printf("RmDir:lstat %s error\n",SubPath.c_str());continue;} if(S_ISDIR(st.st_mode)){if(RmDir(SubPath) == -1) // 如果是目录文件,递归删除{closedir(dirp);return -1;}rmdir(SubPath.c_str());}else if(S_ISREG(st.st_mode)){unlink(SubPath.c_str()); // 如果是普通文件,则unlink}else{printf("RmDir:st_mode %s error ",SubPath.c_str());continue;}}if(rmdir(DirFullPath.c_str()) == -1)//delete dir itself.{closedir(dirp);return -1;}closedir(dirp);return 0;
}int rm(std::string FileName)
{std::string FilePath = FileName;struct stat st; if(lstat(FilePath.c_str(),&st) == -1){return -1;}if(S_ISREG(st.st_mode)){if(unlink(FilePath.c_str()) == -1){return -1;} }else if(S_ISDIR(st.st_mode)){if(FileName == "." || FileName == ".."){return -1;} if(RmDir(FilePath) == -1)//delete all the files in dir.{return -1;}}return 0;
}
linux函数实现rm相关推荐
- linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法
Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...
- linux 数据恢复 ext3grep rm -rf
2019独角兽企业重金招聘Python工程师标准>>> linux 数据恢复 ext3grep rm -rf 1.先安装ext3grep软件: yum install ext3gre ...
- Linux下通过rm -f删除大量文件时提示-bash: /bin/rm: Argument list too long的解决方法...
Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...
- linux函数的阻塞与非阻塞IO及错误处理
linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...
- linux下修改rm命令防止误删除
前言:相信很多朋友都遇到过在linux下用rm命令误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾.那么怎么防止这种情况发生呢?当然是有方法的,我们可以写一个shell脚本,改变一下rm命令的作用. ...
- Linux find xargs rm .orig
/********************************************************************** Linux find xargs rm .orig* 声 ...
- Linux函数exec
Linux函数exec 一.概述: 当用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序.当程序调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其m ...
- Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴
Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 日期:2010-12-11 | 分类:Linux使 ...
- linux系统rm什么命令,linux系统中rm命令的详细解释
Linux系统中rm命令其实是remove的意思,删除一个或多个文件目录,下面由学习啦小编为大家整理了linux系统中rm命令的详细解释,希望对大家有帮助! linux系统中rm命令的详细解释 1.命 ...
最新文章
- vue router获取整条路径参数
- angular 使用rxjs 监听同级兄弟组件数据变化
- 单元测试JUnit 4 (一)——keeps the bar green to keeps the code clean
- JavaSE中环境变量的配置
- [导入]Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]...
- 织梦手机版list.php,织梦一级目录作域名list.php无法跳转到手机站解决方法
- LINUX X11剪贴板/clipboard访问C代码范例
- springboot + mybatis 学英语网、背单词网站
- net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 黑体 is not available to the JVM. See
- 微信小程序弹框(组件)
- 最新版微型商城2.0版网站源码 带有一键安装
- python简易问答机器人_Python入门到实践-问答机器人
- 必备知识:工业相机相关知识(初学者必备)
- 近来比较有意思的新形式网络广告
- 导出word功能,用html代码在word中插入分页符
- 常见的三种字符编码ASCII、Unicode、UTF-8
- 2022年煤矿探放水考题及模拟考试
- 初学C语言一些知识点的整理
- 在vue项目中使用echarts中的dataset制作多维度的柱状图
- 潭州学院html学习(day02)
热门文章
- 浙大宁理c语言试卷,电磁场与电磁波教学大纲-浙江大学宁波理工学院教务部.PDF...
- 魔百盒cm201-1, cm211-1 免费线刷固件及教程(长虹ch代工)
- 【python】多视频截取图片
- html元素设置四边框的顺序,互联网常识:html怎么设置边框
- 使用JavaScript制作动态网页
- 川希:不打造个人IP,你完蛋的速度将会超乎你想象!
- c++ GDI 中SelectObject使用方法和注意事项
- android 4.2.2 显示 stk菜单,在Eclipse4.2.2中搭建android开发环境.docx
- 微信企业号或微信公众号调用扫一扫功能
- mysql bison_使用flex和bison实现的sql引擎解析