免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6793 | 回复: 11
打印 上一主题 下一主题

[C] C remove 函数的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-20 13:06 |只看该作者 |倒序浏览
请教:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <fnmatch.h>
  4. #include <stdio.h>
  5. #include <sys/types.h>
  6. #include <dirent.h>
  7. #include <unistd.h>

  8. int rm_file(char *file)
  9. {
  10.   if (remove(file) == 0)
  11.      printf("Removed %s.\n",file);
  12.      else
  13.      perror("remove");
  14.   return 0;
  15. }


  16. int run_cmd(char *exe, char *cmd_name)
  17. {
  18.         FILE *in;
  19.         extern FILE *popen();
  20.         char buff[512];
  21.      if(!(in = popen(exe, "r"))){
  22.            return -1;
  23.      }

  24.         if(fgets(buff, sizeof(buff), in)!=NULL){
  25.                 sprintf(cmd_name,"%s", buff);
  26.         rm_file(cmd_name);
  27.         }
  28.         pclose(in);

  29. }

  30. main (){
  31. char loop_cmd[1024]="cat /root/files";
  32. char str[1024];
  33. run_cmd(loop_cmd,str);
  34. printf("%s",str);

  35. }
复制代码
cat /root/files 存放着要删除文件的路径

remove: No such file or directory
/mnt/file/tmp.tmp

为何 printf 都可以打印出文件的绝对路径了,

函数 remove 还是删不了, 文件的路径正确,文件的权限也看过了可读可写

用system 调用 rm 命令可以删除,
请教在大家上面这些函数问题出在哪里?

谢谢

论坛徽章:
0
2 [报告]
发表于 2014-03-20 13:18 |只看该作者
这函数太高级了,玩c这么多年没用过。

论坛徽章:
0
3 [报告]
发表于 2014-03-20 13:41 |只看该作者
本帖最后由 xqf 于 2014-03-20 13:42 编辑
  1.         FILE *in;
  2.         extern FILE *popen();
  3.         char buff[512],del[512];


  4.   if(!(in = popen(exe, "r"))){
  5.       return -1;
  6.      }

  7.         if(fgets(buff, sizeof(buff), in)!=NULL){
  8.                 sprintf(cmd_name,"%s", buff);
  9. sprintf(del,"rm -rf %s",cmd_name);
  10. system(del); // 调用shell 可以删除
  11.        // rm_file(cmd_name); //函数删不了
  12.         }
  13.         pclose(in);
复制代码
大家帮忙研究一下问题出在哪儿了

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
4 [报告]
发表于 2014-03-20 14:00 |只看该作者
你要删的目录不是一个空目录
man remove:
remove() deletes a name from the filesystem.  It calls unlink() for files, and rmdir() for directories.
man rmdir:
rmdir() deletes a directory, which must be empty.

论坛徽章:
0
5 [报告]
发表于 2014-03-20 14:10 |只看该作者
目录是非空的,但是我只是删除这个目录的某个文件,难道还要用其它函数,remove 删除文件的函数,再说刚才把目录的下的所有文件都清空了,只留一下个文件也不能删除

论坛徽章:
0
6 [报告]
发表于 2014-03-20 14:12 |只看该作者
已测直接把 rm_file("/mnt/file/tmp.tmp"); 这个可以函数可以删,难道用 sprintf 格化到字符串里不能删

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
7 [报告]
发表于 2014-03-20 14:27 |只看该作者
刚才看你的system里面的"rm -rf",有-r,我以为tmp.tmp是一个目录。
不过你这个问题,可以打印errno看看,当然也可能是buff结尾有\n这类的原因,也可以打印strlen自己数数是否对得上

论坛徽章:
0
8 [报告]
发表于 2014-03-20 16:31 |只看该作者
调试过了没用问题很怪?

明明有文件就是 一直提示:remove: No such file or directory

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
9 [报告]
发表于 2014-03-20 16:43 |只看该作者
那是否是buff后面有\n,比如那个字符串,实际上是"/mnt/file/tmp.tmp\n",你试过strlen打印长度了吗?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
10 [报告]
发表于 2014-03-20 16:45 |只看该作者
system调用后面带一个\n是没有关系的,但是作为文件名直接remove这样是不行的,LZ你再打印一下其长度是否是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP