我正在编写一个只在Linux上用C复制可执行文件的程序。
#include <stdio.h>
int main(int args,char*argv[]){
FILE *src1;
FILE *final;
if ((src1 = fopen("/home/exophrenik/Desktop/src1","rb")) == NULL)
{
printf("Could not open src1\n");
return -12;
}
if ((final = fopen("/home/exophrenik/Desktop/final","wb")) == NULL)
{
printf("Could not open final\n");
return -32;
}
int c;
while((c=fgetc(src1))!=EOF)
{
printf("%d\n",c);
fputc(c,final);
}
fclose(src1);
fclose(final);
return 0;
}
该程序已正确编译,似乎它的工作正常。唯一的问题是,当我尝试运行“#final”时,从命令行执行,我得到Permission Denied错误。我将上述程序重新编译为sudo,并将其作为sudo运行,但它确实有所不同。 从我的小linux经验中我知道,当你尝试使用./命令运行程序时经常遇到Permission Denied,但它不是可执行文件,比如尝试打开这样的txt文件而不是使用gedit打开它。
我的问题是,为什么我唯一能做的就是复制已经运行的可执行文件?我在复制过程中做错了什么会以某种方式破坏新文件?
答案 0 :(得分:1)
我发现了问题。正如其他人已在评论中所说,这是一个权限问题。
我在上面的代码中添加了以下几行
struct stat st;
stat("/home/exophrenik/Desktop/src1", &st);
chmod("/home/exophrenik/Desktop/final", st.st_mode);
这些行将复制src1可执行文件的权限,然后应用于最终文件,使其成为可执行文件。它们需要以下标题
#include <sys/stat.h>