【问题标题】:Why do I get the error "bash: ./a.out: Permission denied" when I execute a C program in Linux mint 15为什么我在 Linux mint 15 中执行 C 程序时收到错误“bash: ./a.out: Permission denied”
【发布时间】: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' 的输出编辑您的问题,以便我们确定这是一个挂载问题。

标签: c linux


【解决方案1】:

我认为,您正试图在 NTFS 分区上运行您的程序,这与安装 Mint 的分区不同。尝试在您的 ext4 分区中编译程序并在那里生成 a.out。它应该运行。

【讨论】:

  • 另一种选择是重新挂载分区以允许设置执行位。
  • 在另一个分区上编译不会改变任何东西,这只是权限问题。但你可能是对的,分区一定是用noexec 或类似的东西挂载的。
  • 是的,它可能安装了 noexec。我只建议了更快的方法。
  • @kunal NTFS 是什么?以及如何在ext4分区编译程序?
  • @Pikrass 我如何安装它?
【解决方案2】:

在安装了 linux 的卷上编译并运行它。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多