Ich versuche, mich mit dem Ändern von Minix Systemaufrufen und Neuaufbau des Kernels vertraut zu machen.Modyifing vorhandenen do_mkdir() Systemaufruf zum Drucken erstellt Ordner, die nicht bereits existiert
I modifizierte mkdir
New dir -> <directory-name> <permissions>
jedes Mal zu drucken, es hieß, es sei denn, das Verzeichnis bereits existierte.
Ich bearbeitet /usr/src/servers/vfs/open.c
, die den Code für mkdir
enthält. Ich habe diese Zeile Code 610 an die Leitung:
printf("New dir -> %s %o",fullpath,dirmode);
Mit diesem bearbeiten, mkdir
korrekt gedruckt, mit der Ausnahme, dass, wenn der Ordner existiert bereits, ich war die folgende Meldung erhalten:
New Dir -> test 755 mkdir: test: file exists
ich erwartet zu sehen:
mkdir: test: file exists
ich dachte, dass der printf zum letzten if-else Körper durch Zugabe in der Nähe von Linie 610, wäre es in diesem Fall nicht ausgeführt werden, da diese i Die f-else-Struktur überprüft, ob das neue Verzeichnis gültig ist (Inode, Berechtigungen usw.), und der Aufruf sollte zurückkehren, wenn das Verzeichnis bereits existiert. Ich lag falsch.
Welche Systemfunktion oder -variable sollte ich überprüfen, um festzustellen, ob die Datei bereits existiert?
Ich verwende Minix Version 3.2.1.
Um dies zu testen, habe ich nur den Kernel wieder aufgebaut, wie folgt aus:
cd /usr/src/releasetools
make hdboot
Ich denke, Sie sollten überprüfen Sie die 'req_mkdir' Rückgabewert, um zu sehen, ob alles gut ging. – LPs
Sie sollten es nennen, wo Sie das printf auskommentiert haben, aber mit dem Rückgabewert von 'req_mkdir' konditioniert. –