我的程序通过TCP套接字接收可执行的二进制文件。在C中创建一个文件作为可执行程序在Ubuntu中
我需要将此文件作为可执行程序保存到硬盘中。文件被成功接收,但问题是默认文件属性被设置为不可执行。
如何在Ubuntu中将文件属性更改为C中的可执行文件?
谢谢 问候, 机器人
我的程序通过TCP套接字接收可执行的二进制文件。在C中创建一个文件作为可执行程序在Ubuntu中
我需要将此文件作为可执行程序保存到硬盘中。文件被成功接收,但问题是默认文件属性被设置为不可执行。
如何在Ubuntu中将文件属性更改为C中的可执行文件?
谢谢 问候, 机器人
如何int chmod(const char *path, mode_t mode)
和int fchmod(int fd, mode_t mode) ?
apropos chmod
man 2 chmod
最简单的例子:
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
char * fpath = "/path/to/binary";
int ret=0;
if(ret = chmod(fpath, S_IRUSR|S_IXUSR) < 0){
perror("chmod failed");
exit(1);
}
printf("chmod ok\n");
exit(0);
}
它完美的作品... Thankx buddy .. – RoboAlex
您可以chmod
更改文件模式。详细信息请阅读手册页(man 2 chmod
)(与shell命令chmod
大致相同)。
你如何创建和写入文件?如果你知道它将会是可执行的,只要首先使用正确的模式创建文件即可。
int fd = open("path/to/file", O_WRONLY | O_CREAT, 0777);
除非umask
被剥离可执行位(常用的值是0022
和0002
其离开单独的可执行位),path/to/file
将创建最初的可执行文件。
答案是对的,但这可能不是一个好主意...... –
通过什么机制,你确定收到的可执行文件永远不会是恶意的? –
@BasileStarynkevitch - 我正在为一个集群机器编程。发送者也将是在主节点上运行的整个应用程序的一部分。所以没有任何恶意问题。 – RoboAlex