1

誰でもアクセスできるファイルを 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;
}

ありがとう!

編集:ニコライのコメントによると、すべてのアクセス=読み取りと書き込み。誰もが実行可能ファイルに書き込めるようにしたくありません。

4

1 に答える 1

2

ファイル作成モードを保証できる唯一の方法は、 を呼び出す前に umask を明示的にゼロにすることです。openこれは、mode引数が umask に対して NAND 演算されるためです。

ファイルモードは、設定後に設定するのがおそらく最善ですcreat

于 2012-09-07T18:32:16.360 に答える