使用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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |