■要求定義
– ファイルやフォルダのアクセス権限を変更する
e.g.
$ ls -l
-rw-rw-r– 1 vagrant vagrant 89 May 17 11:50 sample.txt
$ chmod 777 sample.txt
$ ls -l
-rwxrwxrwx 1 vagrant vagrant 89 May 17 11:50 sample.txt
#include <stdio.h> #include <sys/stat.h> int main(void){ FILE *fp = "./sample.txt"; chmod(fp, 666); return 0; }
これでは上手く行かない。
#include <stdio.h> #include <sys/stat.h> int main(int argc, char**argv){ char ans; int return_code = 0; if(argc == 2){ printf('%sに実行許可を与えます。宜しいでしょうか(y/n)==>', *(argv+1)); scanf('%c', &ans); if(ans == 'y' || ans == 'Y'){ if(chmod(*(argv+1), S_IRUSR | S_IWUSR | S_IXUSR | /* S_IRUSR 00400, S_IWUSR 00200, S_IXUSR 00100 rwx*/ S_IRGRP | S_IXGRP | /*IRGRP 00040 r-x, IXGRP 00010 */ S_IROTH | S_IXOTH) == 0) { /*IROTH 00004, S_IXOTH 00001 */ printf('実行許可を与えました。\n'); } else { printf("実行許可を与えられませんでした\n"); perror(""); return 1; } } else { printf("キャンセルします。\n"); } } else { printf("実行時引数の数が不正です。\n"); return 2; } return 0; }
■mode一覧
S_ISUID 04000:実行時のセット・ユーザー・ID(set user ID)。
S_ISGID 02000:実行時のセット・グループ・ID(set group ID)。
S_ISVTX 01000:スティッキー(sticky)ビット。
S_IRUSR 00400:所有者(owner)による読み取り(read)。
S_IWUSR 00200:所有者による書き込み(write)。
S_IXUSR 00100:所有者による実行(execute)・検索(search)。
S_IRGRP 00040:グループ(group)による読み取り。
S_IWGRP 00020:グループによる書き込み。
S_IXGRP 00010:グループによる実行・検索。
S_IROTH 00004:他人(others)による読み取り。
S_IWOTH 00002:他人による書き込み。
S_IXOTH 00001:他人による実行・検索。