我的程序通过TCP套接字接收可执行的二进制文件。
我需要将此文件作为可执行程序保存到硬盘中。文件已成功接收,但问题是默认文件属性被设置为不可执行。
如何在Ubuntu中将文件的属性更改为C中的可执行文件?
谢谢你, 问候, ROBO
答案 0 :(得分: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);
}
答案 1 :(得分:3)
您是如何创建和编写文件的?如果您知道它将是可执行的,那么只需首先使用正确的模式创建文件。
int fd = open("path/to/file", O_WRONLY | O_CREAT, 0777);
除非umask
正在剥离可执行位(公共值为0022
和0002
,这使得可执行位单独存在),否则path/to/file
将最初创建为可执行。
答案 2 :(得分:2)
您可以使用chmod
更改文件模式。阅读手册页(man 2 chmod
)了解详细信息(与shell命令chmod
大致相同)。