为什么在Linux 15中执行C程序时会出现错误“bash:./a.out:Permission denied”

为什么在Linux 15中执行C程序时会出现错误“bash:./a.out:Permission denied”,c,linux,C,Linux,我正在用C编写一个用户ls命令代码。当我用cc lss.C编译这段代码时,创建了一个a.out文件,但是使用./a.out运行时,我得到了一个错误 我的lss.c: 导致此错误的原因是什么?我认为,您试图在NTFS分区上运行程序,而不是安装Mint的分区。尝试在ext4分区中编译程序,并在那里生成a。它应该运行。我认为,您正在尝试在NTFS分区上运行您的程序,与安装Mint的分区不同。尝试在ext4分区中编译程序,并在那里生成a。它应该运行。在安装linux的卷上编译并运行它。在安装linux的

我正在用C编写一个用户ls命令代码。当我用cc lss.C编译这段代码时,创建了一个a.out文件,但是使用./a.out运行时,我得到了一个错误

我的lss.c:



导致此错误的原因是什么?

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

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

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

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

您需要具有此文件的执行权限。chmod+x a.out应该可以解决这个问题。看起来文件系统安装不正确。请看,您的代码应该调用sprintf而不是printf,最好是使用snprintf和其他更改来检查是否有过长的命令行参数攻击堆栈溢出。然而,这与“无法执行”问题有点相切。您是否已签出对a.out的权限?默认情况下,将设置执行位。您的umask值设置为多少?@glglgl:您的编辑很好,只是它丢失了一条关键信息—提示中嵌入的当前目录。该目录为/media/dilip/New Volume1/c,这证明了涉及NTFS分区的建议。请使用mount | grep'media/dilip/New Volume1'和ls-l'/media/dilip/New Volume1/c/a.out'的输出编辑您的问题,这样我们可以确保这是一个装载问题。您需要对此文件具有执行权限。chmod+x a.out应该可以解决这个问题。看起来文件系统安装不正确。请看,您的代码应该调用sprintf而不是printf,最好是使用snprintf和其他更改来检查是否有过长的命令行参数攻击堆栈溢出。然而,这与“无法执行”问题有点相切。您是否已签出对a.out的权限?默认情况下,将设置执行位。您的umask值设置为多少?@glglgl:您的编辑很好,只是它丢失了一条关键信息—提示中嵌入的当前目录。该目录为/media/dilip/New Volume1/c,这为涉及NTFS分区的建议提供了依据。使用mount | grep'media/dilip/New Volume1'和ls-l'/media/dilip/New Volume1/c/a.out'的输出编辑您的问题,因此,我们可以确保这是一个装载问题。另一种选择是重新装载分区以允许设置执行位。在另一个分区上编译不会改变任何东西,这只是权限问题。但是你可能是对的,分区一定是用noexec或类似的东西挂载的。是的,它可能是用noexec挂载的。我只是建议更快的方法。@kunal什么是NTFS?如何在ext4分区中编译该程序?@Pikrass如何装载它?另一种选择是重新装载该分区以允许设置执行位。在另一个分区上编译不会改变任何东西,这只是权限问题。但是你可能是对的,分区一定是用noexec或类似的东西挂载的。是的,它可能是用noexec挂载的。我只是建议更快的方法。@kunal什么是NTFS?如何在ext4分区中编译程序?@Pikrass如何挂载它?
#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
$