【发布时间】:2013-08-12 13:33:14
【问题描述】:
我正在用 C 语言编写用户 ls 命令代码。当我使用 cc lss.c 编译此代码时,会创建一个 a.out 文件,但随后使用 ./a.out 运行时,会出现错误。
我的lss.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char cmdline[100];
if ( argc > 2 )
{
printf(cmdline, "ls %s %s", argv[1], argv[2]);
system(cmdline);
}
return 0;
}
当我编译并运行时,会发生以下情况:
$ cd "/media/dilip/New Volume1/c"
$ cc lss.c
$ ./a.out
bash: ./a.out: Permission denied
$
这个错误的原因是什么?
【问题讨论】:
-
你需要有这个文件的执行权限。
chmod +x a.out应该可以解决。 -
看起来文件系统安装不正确。见askubuntu.com/questions/18052/exe-file-permission-fail
-
您的代码应该调用
sprintf()而不是printf(),最好是snprintf()进行其他更改,以检查您是否不会受到过长命令行参数的攻击(堆栈溢出) .但是,这与“无法执行”问题有些相干。你检查过a.out的权限了吗?默认情况下,将设置执行位。你的umask值设置为多少? -
@glglgl:你的编辑很好,只是它丢失了一条关键信息——嵌入在提示中的当前目录。那个目录是
/media/dilip/New Volume1/c,这让人相信涉及NTFS分区的建议。 -
使用
mount | grep 'media/dilip/New Volume 1'和ls -l '/media/dilip/New Volume1/c/a.out'的输出编辑您的问题,以便我们确定这是一个挂载问题。