誰でもアクセスできるファイルを Unix で作成したいと考えています。ファイルが既に存在する場合は、切り捨てて空にする必要があります。
開いているマニュアルページを読んだ後、次の呼び出しがあります。それが正しい方法であるかどうかを確認したかっただけです。
int fd;
int flags = O_RDWR | O_CREAT | O_TRUNC;
/* Set umask to Octal 011 */
mode_t mode = S_IXGRP | S_IXOTH;
/* umask syscall alwasy succeeds. No need to save return value (previous umask value) */
umask(mode);
/* Set mode to Octal 666. open syscall will and mode with ~umask.
0666 & ~0011 = 0666 i.e. the mode we want to set.
*/
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
if ((fd = open(path.c_str(), flags, mode)) < 0) {
return false;
} else {
close(fd);
return true;
}
ありがとう!
編集:ニコライのコメントによると、すべてのアクセス=読み取りと書き込み。誰もが実行可能ファイルに書き込めるようにしたくありません。