在linux C上复制文件

标签 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;
}

程序已正确编译,看起来它的工作是正确的。唯一的问题是,当我尝试从命令行运行“最终”可执行文件时,出现“权限被拒绝”错误。我将上面的程序重新编译为 sudo 并以 sudo 运行它,但它确实有所不同。 根据我的 linux 小经验,我知道当您尝试使用 ./命令运行程序但它不是可执行文件时,经常会遇到权限被拒绝的情况,例如尝试打开这样的 txt 文件而不是使用 gedit 打开它。

我的问题是,当我唯一做的就是复制一个已经工作的可执行文件时,为什么会出现同样的错误?我在复制过程中是否做错了什么以某种方式破坏了新文件?

最佳答案

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

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

 struct stat st;

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

这些行将复制 src1 可执行文件的权限,然后应用到最终文件,使其也成为可执行文件。他们需要以下 header

#include <sys/stat.h>

关于在linux C上复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103615/

相关文章:

c - 在 C 中读取文件 - 范围和上下文问题

c - 动态分配数组中的值既不能访问也不能更改

c++ - GDB:如何找到已加载符号(symbols,symbols,symbols)的内存总大小?

c - 使用 C 代码获取与 ifconfig 相同的信息

Linux程序——反向高亮文本

linux - 使用linux命令发送电子邮件

regex - sed 和 PHP 标签

c - 为什么我的函数在这个特定的测试用例中失败了?

linux - ' 在 sed 中出现在错误的地方

linux - 带有 -i 选项的 sed 命令(就地编辑)在 Ubuntu 上运行良好,但在 Mac 上运行良好