2012-05-26 43 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將創建最初的可執行文件。

相關問題