Scroll to navigation

MKNOD(2) Linux Programmeurs Handleiding MKNOD(2)

NAAM

mknod, mknodat - maak een map, een speciaal- of een normaal bestand

SAMENVATTING

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int mknod(const char *padnaam, mode_t toestand, dev_t app);
#include <fcntl.h>           /* Definitie van AT_* constanten */
#include <sys/stat.h>
int mknodat(int map_bi, const char *padnaam, mode_t toestand, dev_t app);

Test Macro´s in glibc (zie feature_test_macros(7)):

mknod():

_XOPEN_SOURCE >= 500
|| /* Sinds glibc 2.19: */ _DEFAULT_SOURCE
|| /* Glibc versies <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

BESCHRIJVING

mknod() probeert een bestandsysteem node te maken (bestand, apparaat speciaal bestand of een benoemde pijp) met de naam padnaam, bepaald door toestand en app.

toestand bepaald de bestandsmodus die zal worden gebruikt, en het soort node dat gemaakt zal worden. Dat hoort een combinatie (met bit wijze OF) ) van een hieronder genoemde bestand soorten en nul of meer van de bestandsmodi zoals te lezen in inode(7).

De toestemmingen worden aangepast door het umask van het proces op de bekende manier: de toestemmingen van de gemaakte node worden (toestemmingen & ~umask).

De bestand soort zou een van S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO of S_IFSOCK moeten zijn, om: een normaal bestand te specificeren (dat leeg aangemaakt zal worden), een speciaal teken bestand, een speciaal blok-bestand, of een FIFO (pijp met naam), of UNIX domein socket, respectievelijk. (Het nul bestand type is equivalent aan S_IFREG.)


Als het bestand soort S_IFCHR of S_IFBLK is, dan bepaald app de grote en de kleine nummers van het nieuw gemaakte apparaat speciale bestand; anders wordt het genegeerd.

Als padnaam al bestaat, of als het een symbolische koppeling is, dan faalt deze aanroep met de EEXIST foutmelding.

De nieuw gemaakte node zal eigendom zijn van het effectieve gebruiker ID van het proces. Als de map waar de node in zit het set-group-id bit aan heeft staan of als het bestandssysteem gekoppeld is met BSD groep regels, dan zal de nieuwe node het groep eigendom van zijn ouder-mappen erven; anders zal het eigendom zijn van het geldende groep ID van het proces.

mknodat()

De mknodat() systeem aanroep werkt op exact dezelfde manier als mknod(), behalve voor de hier beschreven verschillen.

Als de padnaam gegeven in padnaam relatief is, dan wordt deze geïnterpreteerd als relatief aan de map zoals gerefereerd door de bestand beschrijving dirfd (liever dan relatief aan de huidige werkmap van het aanroepende proces, zoals gedaan wordt door mknod() bij een relatieve padnaam).

Als padnaam relatief is en dirfd is de speciale waarde AT_FDCWD, dan wordt padnaam geïnterpreteerd als relatief aan de huidige werkmap van het aanroepende proces (zoals mkdnod()).

Als padnaam absoluut is, dan wordt mapbi genegeerd.

Zie openat(2) voor een uitleg over de noodzaak van mknodat().

EIND WAARDE

mknod() en mknodat() geven nul terug bij slagen, of -1 als een fout optrad (in welk geval errno overeenkomstig gezet).

FOUTEN

De ouder map staat schrijven naar het proces niet toe, of een van de mappen in het voorvoegsel van padnaam stond zoeken niet toe. (Zie ook path_resolution(7).)
De gebruiker quota aan schijf blokken of inodes van het bestandssysteem is uitgeput.
padnaam bestaat al. Inclusief het geval waar padnaam een symbolische koppeling is, al dan niet bungelend.
padnaam wijst buiten de voor u toegankelijke adresruimte.
toestand vroeg om het maken van iets anders dan een normaal bestand, apparaat speciaal bestand, of FIFO.
Teveel symbolische koppelingen werden tegengekomen bij het vaststellen van padnaam.
padnaam was te lang.
Een map deel van padnaam bestaat niet of is een loshangende symbolische koppeling.
Onvoldoende kernelgeheugen voorhanden.
Het apparaat dat padnaam bevat heeft geen ruimte voor een nieuwe node.
Een deel gebruikt als map in padnaam is in feite geen map.
toestand vroeg om het aanmaken van iets anders dan een normaal bestand, FIFO (pijp met naam), of een UNIX domein socket, en de aanroeper is niet de gerechtigd; (Linux: heeft niet de CAP_MKNOD capaciteit); wordt ook teruggegeven als het bestandssysteem waar padnaam op zit, het gevraagde type node niet ondersteund.
padnaam verwijst naar een bestand op een alleen-lezen bestandsysteem.

De volgende additionele fouten kunnen optreden voor mknodat():

mapbi is geen geldige bestandindicator.
padnaam is relatief en mapbi is een bestandsindicatoor die naar een bestand wijst die geen map is.

VERSIES

mknodat() werd toegevoegd aan Linux in kernel 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc in versie 2.4.

VOLDOET AAN

mknod(): SVr4, 4.4BSD, POSIX.1-2001 (but see below), POSIX.1-2008.

mknodat(): POSIX.1-2008.

OPMERKINGEN

POSIX.1-2001 schrijft: "Het enige overdraagbare gebruikt van mknod() is door een FIFO-speciaal bestand aan te maken. Als mode niet gelijk is aan S_IFIFO of dev is niet 0, dan is het gedrag van mknod() niet gespecificeerd". Echter zou men tegenwoordig nooit mknod() voor dit doel moeten gebruiken; men zou mkfifo(3) moeten gebruiken, een aanroep die speciaal voor dit doel bedoeld is.

Onder Linux, kan mknod() niet gebruikt worden om mappen aan te maken. Men zou mappen moeten aanmaken met mkdir(2).

Er bestaan veel ongelukkigheden in het NFS protocol. Enkele van deze beïnvloeden mkdnod() en mknodat().

ZIE OOK

mknod(1), chmod(2), chown(2), fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2), makedev(3), mkfifo(3), acl(5), path_resolution(7)

COLOFON

Deze pagina is onderdeel van release 5.10 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

VERTALING

De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

13 augustus 2020 Linux