需求是想实现一个删除文件或目录的功能,类似于 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相关推荐

  1. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法

    Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...

  2. linux 数据恢复 ext3grep rm -rf

    2019独角兽企业重金招聘Python工程师标准>>> linux 数据恢复 ext3grep rm -rf 1.先安装ext3grep软件: yum install ext3gre ...

  3. Linux下通过rm -f删除大量文件时提示-bash: /bin/rm: Argument list too long的解决方法...

    Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...

  4. linux函数的阻塞与非阻塞IO及错误处理

    linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...

  5. linux下修改rm命令防止误删除

    前言:相信很多朋友都遇到过在linux下用rm命令误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾.那么怎么防止这种情况发生呢?当然是有方法的,我们可以写一个shell脚本,改变一下rm命令的作用. ...

  6. Linux find xargs rm .orig

    /********************************************************************** Linux find xargs rm .orig* 声 ...

  7. Linux函数exec

    Linux函数exec 一.概述: 当用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序.当程序调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其m ...

  8. Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴

    Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 日期:2010-12-11 | 分类:Linux使 ...

  9. linux系统rm什么命令,linux系统中rm命令的详细解释

    Linux系统中rm命令其实是remove的意思,删除一个或多个文件目录,下面由学习啦小编为大家整理了linux系统中rm命令的详细解释,希望对大家有帮助! linux系统中rm命令的详细解释 1.命 ...

最新文章

  1. vue router获取整条路径参数
  2. angular 使用rxjs 监听同级兄弟组件数据变化
  3. 单元测试JUnit 4 (一)——keeps the bar green to keeps the code clean
  4. JavaSE中环境变量的配置
  5. [导入]Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]...
  6. 织梦手机版list.php,织梦一级目录作域名list.php无法跳转到手机站解决方法
  7. LINUX X11剪贴板/clipboard访问C代码范例
  8. springboot + mybatis 学英语网、背单词网站
  9. net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 黑体 is not available to the JVM. See
  10. 微信小程序弹框(组件)
  11. 最新版微型商城2.0版网站源码 带有一键安装
  12. python简易问答机器人_Python入门到实践-问答机器人
  13. 必备知识:工业相机相关知识(初学者必备)
  14. 近来比较有意思的新形式网络广告
  15. 导出word功能,用html代码在word中插入分页符
  16. 常见的三种字符编码ASCII、Unicode、UTF-8
  17. 2022年煤矿探放水考题及模拟考试
  18. 初学C语言一些知识点的整理
  19. 在vue项目中使用echarts中的dataset制作多维度的柱状图
  20. 潭州学院html学习(day02)

热门文章

  1. 浙大宁理c语言试卷,电磁场与电磁波教学大纲-浙江大学宁波理工学院教务部.PDF...
  2. 魔百盒cm201-1, cm211-1 免费线刷固件及教程(长虹ch代工)
  3. 【python】多视频截取图片
  4. html元素设置四边框的顺序,互联网常识:html怎么设置边框
  5. 使用JavaScript制作动态网页
  6. 川希:不打造个人IP,你完蛋的速度将会超乎你想象!
  7. c++ GDI 中SelectObject使用方法和注意事项
  8. android 4.2.2 显示 stk菜单,在Eclipse4.2.2中搭建android开发环境.docx
  9. 微信企业号或微信公众号调用扫一扫功能
  10. mysql bison_使用flex和bison实现的sql引擎解析