私のプログラムは、TCP ソケットを介して実行可能なバイナリ ファイルを受け取ります。
このファイルを実行可能プログラムとしてハードディスクに保存する必要があります。ファイルは正常に受信されましたが、問題はデフォルトのファイル属性が実行不可に設定されていることです。
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);
}
ファイルの作成と書き込みはどのように行っていますか? 実行可能になることがわかっている場合は、最初に正しいモードでファイルを作成してください。
int fd = open("path/to/file", O_WRONLY | O_CREAT, 0777);
が実行可能ビットを削除しない限りumask
(一般的な値は0022
と0002
で、実行可能ビットをそのままにします)、path/to/file
最初は実行可能に作成されます。
でファイルモードを変更できますchmod
。詳細については、manページ(man 2 chmod
)をお読みください(シェルコマンドとほぼ同じchmod
です)。