加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用stdlib.h中的system()函数在c程序中使用’rm’命令

发布时间:2020-12-16 06:49:46 所属栏目:百科 来源:网络整理
导读:我试图在主例程中使用rm命令删除我已经采用命令行参数的文件.该值存储在我尝试过使用的argv [2]中 system("rm argv[2]");system("rm ./argv[2]");system("rm $HOME/argv[2]"); 但它给我一个错误的说法 "cannot locate file argv[2]" 文件名存储在argv [2]中,
我试图在主例程中使用rm命令删除我已经采用命令行参数的文件.该值存储在我尝试过使用的argv [2]中

system("rm argv[2]");

system("rm ./argv[2]");

system("rm $HOME/argv[2]");

但它给我一个错误的说法

"cannot locate file argv[2]"

文件名存储在argv [2]中,因为我已经检查过了.

有人请指导我!

解决方法

为什么不使用 remove或 unlink命令而不是系统(“rm …”)?

除去(的argv [2]);或取消链接(argv [2]);

必须使用系统(“rm …”)的情况下更新

如果你必须使用system(“rm …”),ZelluX说明你必须从argv [2]中检索文件名是正确的.您可以使用snprintf或strncpy在argv [2]中检索字符串.使用限制输入大小的函数的变体是good idea,因为不能保证argv [2]中字符串的长度.

根据您的应用程序,您可能还需要调用stat来验证argv [2]中的字符串确实是文件,并可能限制文件类型.

例:

此示例调用stat以验证argv [2]是常规文件,并调用asprintf为缓冲区动态分配空间.

char *p;
struct stat st;

if (stat(argv[2],&st) == 0 && S_ISREG(st->st_mode))
{
    if (asprintf(&p,"rm %s",argv[2]) != -1)
    {
        system(p);
        free(p);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读