在C中复制可执行文件

标签 c file fwrite md5sum

我在 C 语言中将文件从一个目录复制到另一个目录时遇到问题。具体来说,我的代码可以很好地处理文本文件,但不能处理可执行文件。写入的字节数是正确的,文件权限也是正确的,但副本的结果类型未被文件系统识别为可执行文件(我正在 xubuntu 虚拟机上工作)并且具有“未知”类型。因此,如果我在 bash 上从命令行回显 md5sum 的结果,它们是不同的。

在下面的代码中,“checkErrno”是我定义的一个调用 perror 的函数。 “currDir”是当前目录,“DIRNAME”是我要移动到的目录。所有库都已正确包含,我只是复制并粘贴了重要的代码块。

struct stat fileSt;
if(stat(fileName,&fileSt) != 0) checkErrno("Stats file");
char currDir[PATH_MAX];
FILE* file;
if(getcwd(currDir,PATH_MAX) == NULL) checkErrno("Currdir");
if(chdir(DIRNAME) != 0) checkErrno("Chdir");
if((file = fopen(fileName,"w")) == NULL) checkErrno("Create file");
if(chmod(fileName, fileSt.st_mode & 07777)) perror("chmod");
if(fwrite(fileMsg.data.buf,1,fileSize,file) < fileSize) checkErrno("fwrite");
fflush(file);
if(fclose(file) != 0) checkErrno("fclose");
if(chdir(currDir) != 0) checkErrno("chdir");

提前致谢!

编辑:错误出现在我用来读取文件的函数中。一旦我发现,我就轻松解决了它。

最佳答案

您的 chmod 会清除所有位而不是设置任何位

if(chmod(fileName, fileSt.st_mode & 07777))

您需要确保副本至少被标记为可执行,也许还可以读取,(我不确定用户是否必须具有读取权限才能执行某些操作,但这很有意义。

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

相关文章:

C链接库独立构建

javascript - 通过输入文本加载和更新本地 JSON 文件

php - 如何在特定标记之前写入 </file>

c - 为什么 fwrite (with struct) 写入未知符号?

linux - 如何用另一个文件中的另一组替换一个文件中的一组字符串

C 将 uint16 写入文件出现错误

c - 尝试读取文件时出现段错误?

c - 如何获取 osx 子网中的事件 IP 和 MAC 地址列表

objective-c - Canon EDSDK 在 Mac OS 10.7.5 上的一个非常基本的程序上因 EXC_BAD_ACCESS 而崩溃

delphi - 字节长缓冲区超过 1MB 的问题