在Linux C上复制文件

时间:2016-05-08 18:52:58

标签: c linux

我正在编写一个只在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打开它。

我的问题是,为什么我唯一能做的就是复制已经运行的可执行文件?我在复制过程中做错了什么会以某种方式破坏新文件?

1 个答案:

答案 0 :(得分:1)

我发现了问题。正如其他人已在评论中所说,这是一个权限问题。

我在上面的代码中添加了以下几行

 struct stat st;

  stat("/home/exophrenik/Desktop/src1", &st);
  chmod("/home/exophrenik/Desktop/final", st.st_mode);

这些行将复制src1可执行文件的权限,然后应用于最终文件,使其成为可执行文件。它们需要以下标题

#include <sys/stat.h>