Die Funktion der Linux-C-Zugriffsfunktion besteht darin, die Zugriffsberechtigung der Datei zu bestimmen. Die Syntax dieser Funktion lautet „int access(const char * pathname, int mode);“, wobei der Parameter „pathname“ den Dateipfad darstellt Name, der erkannt werden muss.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.
Wie verwende ich die Linux-C-Zugriffsfunktion?
Linux C-Zugriff
【1】Funktion
Bestimmen der Dateizugriffsberechtigung
【2】Header. Datei
#include <unistd.h>
【3】Funktion Definition
int access(const char * pathname, int mode);
【4】Parameterbeschreibung
Pfadname: Der Pfadname der Datei, die erkannt werden muss
Modus: Wenn der Parameter 0 ist, bedeutet dies, dass die Existenz der Datei überprüft wird , gib 0 zurück, wenn es nicht existiert, gib -1 zurück. Diese Funktion kann auch andere Dateiattribute prüfen:
06 Lese- und Schreibberechtigung prüfen
04 Leseberechtigung prüfen
02 Schreibberechtigung prüfen
01 Ausführungsberechtigung prüfen
00 Überprüfen Sie die Existenz der Datei
【5】Rückgabewert
Wenn alle zu prüfenden Berechtigungen die Prüfung bestanden haben, wird ein Wert von 0 zurückgegeben, was den Erfolg anzeigt; Die Berechtigung ist verboten. Der Wert -1 wird zurückgegeben, was darauf hinweist, dass ein Fehler vorliegt.
【6】Funktionsbeschreibung
Access() prüft, ob eine vorhandene Datei gelesen/geschrieben werden kann.
Es gibt mehrere Kombinationen des Parametermodus R_OK, W_OK, X_OK und F_OK.
R_OK, W_OK und X_OK werden verwendet, um zu prüfen, ob die Datei jeweils über Lese-, Schreib- und Ausführungsberechtigungen verfügt. Mit F_OK wird ermittelt, ob die Datei vorhanden ist.
Da access() nur Berechtigungen prüft und nicht auf die Dateiform oder den Dateiinhalt achtet, bedeutet die Angabe eines Verzeichnisses als „beschreibbar“, dass Vorgänge wie das Erstellen neuer Dateien im erstellt werden können Verzeichnis, nicht Dies bedeutet, dass dieses Verzeichnis als Datei behandelt werden kann.
Zum Beispiel werden Sie feststellen, dass DOS-Dateien alle über „ausführbare“ Berechtigungen verfügen, sie jedoch fehlschlagen, wenn sie mit execve() ausgeführt werden.
【7】Fehlercode
EACCESS Die durch den Parameter Pfadname angegebene Datei erfüllt nicht die für den Test erforderlichen Berechtigungen.
EROFS Die auf Schreibberechtigungen zu prüfende Datei liegt in einem schreibgeschützten Dateisystem vor.
EFAULT Der Parameterpfadnamenzeiger überschreitet den zugänglichen Speicherplatz.
EINVAL-Parametermodus ist falsch.
ENAMETOOLONG Der Parameterpfadname ist zu lang.
ENOTDIR Der Parameter Pfadname ist ein Verzeichnis.
ENOMEM Unzureichender Kernspeicher
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
【8】附加说明
使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。
【9】范例
// 范例1 #include <unistd.h> int main() { if (access("/etc/passwd", R_OK) == 0) printf("/etc/passwd can be read\n"); return 0; } // 范例2 #include#include <unistd.h> int file_exists(char *filename); int main(void) { printf("Does NOTEXIST.FIL exist: %s\n", file_exists("NOTEXISTS.FIL") ? "YES" : "NO"); return 0; } int file_exists(char *filename) { return (access(filename, 0) == 0); }
【10】相关函数
stat,open,chmod,chown,setuid,setgid
推荐学习:《linux视频教程》
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Linux-C-Zugriffsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!