をサポートしていないシステムでopen安全にシミュレートできるようにしたいと考えO_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOWています。私が求めていることをある程度達成することができます:O_CREAT | O_WRONLY | O_APPEND | O_NOFOLLOWO_NOFOLLOW
struct stat lst;
if (lstat(filename, &lst) != -1 && S_ISLNK(lst.st_mode)) {
errno = ELOOP;
return -1;
}
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW, mode);
しかし、競合状態が発生し、セキュリティ上の問題が発生する可能性があります。
touchユーザーだけが書き込むことができるダミーファイルを作成することを考えましたingのようなものでfilename、lstatチェックを行い、chmod書き込みが終了した後に使用します(ファイルモードビットを修正するため)が、何か大きなものを見落とす可能性があります(たとえば、ファイルがfilename存在する場合、通常のファイルではない場合、または既にシンボリック リンクである場合)。
どう思いますか?