<ブロック引用>
Linux
/dev/null を O_WRONLY で開き、次に dup2 を実行して問題のあるファイル記述子を閉じ、その記述子を /dev/null に再利用します。この方法では、ファイル記述子への読み取りまたは書き込みはすべて失敗します。
記述子を /dev/null
に複製した場合 、書き込みは失敗しません 、しかし成功 、読み取りは成功します 0 (eof) を返します。
これはあなたが望むものかもしれませんし、そうでないかもしれません.
Linux では、flags =3 (O_WRONLY|O_RDWR
) のファイルを開くこともできます。 別名 O_NOACCESS
) これにより、読み取りまたは書き込みが EBADF
で失敗します。 .
ファイルは ioctl でのみ使用できます。これにより、他の回答やコメントで説明されていない危険が生じます。ファイル記述子に対して実行される操作は、読み取りと書き込みだけではありません。 (lseek
はどうですか? または ftruncate
?).
更新:
文書化されていない O_WRONLY|O_RDWR
よりも優れたものを見つけました :O_PATH = 010000000 / 0x200000
. open(2) マンページによると:
O_PATH (since Linux 2.6.39) Obtain a file descriptor that can be used for two purposes: to indicate a location in the filesystem tree and to perform opera- tions that act purely at the file descriptor level. The file itself is not opened, and other file operations (e.g., read(2), write(2), fchmod(2), fchown(2), fgetxattr(2), mmap(2)) fail with the error EBADF. The following operations can be performed on the resulting file descriptor: * close(2); fchdir(2) (since Linux 3.5); fstat(2) (since Linux 3.6). * Duplicating the file descriptor (dup(2), fcntl(2) F_DUPFD, etc.).