2012-05-26 45 views
2

我的程序通过TCP套接字接收可执行的二进制文件。在C中创建一个文件作为可执行程序在Ubuntu中

我需要将此文件作为可执行程序保存到硬盘中。文件被成功接收,但问题是默认文件属性被设置为不可执行。

如何在Ubuntu中将文件属性更改为C中的可执行文件?

谢谢 问候, 机器人

+11

答案是对的,但这可能不是一个好主意...... –

+1

通过什么机制,你确定收到的可执行文件永远不会是恶意的? –

+0

@BasileStarynkevitch - 我正在为一个集群机器编程。发送者也将是在主节点上运行的整个应用程序的一部分。所以没有任何恶意问题。 – RoboAlex

回答

6

如何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); 
} 
+0

它完美的作品... Thankx buddy .. – RoboAlex

2

您可以chmod更改文件模式。详细信息请阅读手册页(man 2 chmod)(与shell命令chmod大致相同)。

3

你如何创建和写入文件?如果你知道它将会是可执行的,只要首先使用正确的模式创建文件即可。

int fd = open("path/to/file", O_WRONLY | O_CREAT, 0777); 

除非umask被剥离可执行位(常用的值是00220002其离开单独的可执行位),path/to/file将创建最初的可执行文件。

相关问题