GNU/Linux >> Znalost Linux >  >> Linux

Nejbezpečnější způsob, jak vynutit uzavření deskriptoru souboru

otevřete /dev/null s O_WRONLY, pak dup2 zavřete problematický deskriptor souboru a znovu použijte jeho deskriptor pro /dev/null. Tímto způsobem selže jakékoli čtení nebo zápis do deskriptoru souboru.

Pokud zkopírujete deskriptor do /dev/null , žádný zápis neselže , ale úspěch a čtení bude úspěšné a vrátí 0 (eof).

To může nebo nemusí být to, co chcete.

V linuxu můžete také otevřít soubor s příznaky =3 (O_WRONLY|O_RDWR aka O_NOACCESS ), což způsobí selhání jakéhokoli čtení nebo zápisu s EBADF .

Soubor bude dostupný pouze pro ioctls -- což přináší nebezpečí, o kterém se v další odpovědi a komentářích nemluví:čtení a zápis nejsou jediné operace prováděné na deskriptorech souborů. (co třeba lseek nebo ftruncate ?).

Aktualizace:

Našel jsem něco lepšího než nezdokumentovaný O_WRONLY|O_RDWR :O_PATH = 010000000 / 0x200000 . Podle manuálové stránky 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. Jak upravit soubor na místě?

  2. Přenositelnost odkazů na deskriptor souboru?

  3. Jak vynutit smazání souboru?

  1. Cloudové zálohování vs. místní zálohování:Nejbezpečnější způsob ukládání dat

  2. Načíst název souboru z deskriptoru souboru v C

  3. Přenosný způsob, jak získat velikost souboru (v bajtech) v shellu?

  1. Jak fungují limity linuxových deskriptorů?

  2. Chci počkat na deskriptor souboru i na mutex, jaký je doporučený způsob, jak to udělat?

  3. Znovu otevřít deskriptor souboru s jiným přístupem?