buka /dev/null dengan O_WRONLY, lalu dup2 untuk menutup deskriptor file yang menyinggung dan gunakan kembali deskriptornya untuk /dev/null. Dengan cara ini, setiap pembacaan atau penulisan ke deskriptor file akan gagal.
Jika Anda menduplikasi deskriptor ke /dev/null
, penulisan apa pun tidak akan gagal , tapi berhasil , dan pembacaan akan berhasil dan kembalikan 0 (eof).
Ini mungkin atau mungkin bukan yang Anda inginkan.
Di linux, Anda juga dapat membuka file dengan flag =3 (O_WRONLY|O_RDWR
alias O_NOACCESS
) yang akan menyebabkan kegagalan baca atau tulis dengan EBADF
.
File hanya akan tersedia untuk ioctls - yang menimbulkan bahaya yang tidak dibicarakan di jawaban dan komentar lain:membaca dan menulis bukan satu-satunya operasi yang dilakukan pada deskriptor file. (bagaimana dengan lseek
atau ftruncate
?).
Perbarui:
Saya menemukan sesuatu yang lebih baik daripada O_WRONLY|O_RDWR
yang tidak berdokumen :O_PATH = 010000000 / 0x200000
. Menurut halaman manual 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.).