GNU/Linux >> Belajar Linux >  >> Linux

Cara teraman untuk menutup paksa deskriptor file

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.).

Linux
  1. Cara Mudah Menyembunyikan File dan Direktori di Linux

  2. Cara Memodifikasi File Di Tempat?

  3. Portabilitas Tautan File Descriptor?

  1. Echo To File Descriptor Menimpa File?

  2. Ambil nama file dari deskriptor file di C

  3. Cara portabel untuk mendapatkan ukuran file (dalam byte) di shell?

  1. cara tercepat mengonversi file yang dibatasi tab ke csv di linux

  2. Bagaimana cara kerja batas deskriptor file linux?

  3. Saya ingin menunggu deskriptor file dan mutex, apa cara yang disarankan untuk melakukan ini?