Inhaltsverzeichnis
open()——打开或者创建一个文件
write()
read()
Hinweis:
lseek-Funktion
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

May 15, 2023 pm 09:25 PM
linux

Das Linux-Betriebssystem folgt dem Konzept, dass alles eine Datei ist. Fast alle Dateigeräte können mit einer Reihe von Systemaufrufen bedient werden, nämlich open()/close()/write()/read() usw. Systemaufrufe und C-Bibliotheksaufrufe bedienen Dateien auf ähnliche Weise. Das mit Linux gelieferte Handbuch ist das maßgeblichste. Überprüfen Sie die Systemaufrufnutzung anhand des Man-Handbuchs.

Codename—— Was es darstellt

  • 1 —— Befehle, die Benutzer in der Shell-Umgebung bedienen/ausführen können

  • 2 — Funktionen und Tools, die vom System aufgerufen werden können Kernel

  • 3 —— Einige häufig verwendete Funktionen und Funktionsbibliotheken, die meisten C-Funktionsbibliotheken

  • 4 —— Beschreibung von Gerätedateien, normalerweise Geräte unter /dev

  • 5 —— Das Format von Konfigurationsdateien oder bestimmten Dateien

  • 6 — Für Systemadministratoren verfügbare Befehle

  • 9 –– code>/usr/include im Linux-Verzeichnis; einige der unten enthaltenen Header-Dateien enthalten sys, bei denen es sich tatsächlich um Header-Dateien im Unterverzeichnis unter include

  • open() handelt – öffnen oder erstellen Sie eine Datei
  • So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

  • Rückgabewerttyp:

    int——Dateideskriptor fd, jedes Mal, wenn Sie eine Datei öffnen, erhalten Sie einen Dateideskriptor. Wir führen Lese- und Schreibvorgänge über den Dateideskriptor aus.

Fehler: -1/usr/include目录下;下面包含的一些头文件有的带了sys,其实是include底下的子目录中的头文件

open()——打开或者创建一个文件

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

返回值类型: int——文件描述符fd,每打开一个文件,就会得到一个文件描述符,这个文件描述符是整形的,我们通过文件描述符进行读写操作。

  • 失败:-1

  • 成功:>= 0,即文件描述符;

  • mode_t是一个类型别名,实际上就是一个有符号的整数,对open函数而言,仅仅当创建新文件时才使用第三个参数

flag:打开标志

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

注意: 这些其实都是定义的一些宏,当需要使用到多个参数时,使用按位或“ | ”构成多个flag参数

也可跟随下面的方式一起使用:

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

其他不一一介绍,需要使用时自查。

write()

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

返回值

  • 若成功为已经写入的字节数;

  • 若出错为-1;

注意:计划写入的字节数和函数的返回值不相等时,表示写入出现了错误,可以用来检验写入是否成功;

参数:

  • fd:写入文件的文件描述符;

  • buf:存放待写数据的缓存;

  • count:要求写入一次数据的字节数;

注意:

对于普通文件,写操作从文件的当前位移量处开始,若如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

read()

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

返回值 :读到的字节数

  • 若已到文件尾为0;若出错为-1;

参数

  • fd:读取文件的文件描述符;

  • buf:存放读取数据的缓存;

  • count

Erfolg: >= 0, was der Dateideskriptor ist;

mode_t ist ein Typalias, der eigentlich eine vorzeichenbehaftete Ganzzahl ist Der dritte Parameter wird nur beim Erstellen einer neuen Datei verwendet. Flag: Open Flag. alt="So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf" />

Hinweis:

Hierbei handelt es sich tatsächlich um einige definierte Makros. Wenn mehrere Parameter verwendet werden müssen, verwenden Sie das bitweise ODER „|“. „Mehrere Flag-Parameter bilden

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf kann auch auf folgende Weise verwendet werden:

🎜 So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf So rufen Sie das zugrunde liegende System auf: von Linux-Betriebsdateien 🎜🎜Andere werden nicht einzeln vorgestellt. Bitte überprüfen Sie selbst, wann Sie sie verwenden müssen. 🎜🎜write()🎜🎜So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auffd: Dateideskriptor der geschriebenen Datei; 🎜🎜🎜 🎜buf: Cache zum Speichern der zu schreibenden Daten; 🎜🎜🎜🎜count: die Anzahl der erforderlichen Bytes um Daten einmal zu schreiben; 🎜🎜🎜🎜🎜Hinweis: 🎜🎜🎜 Bei normalen Dateien beginnt der Schreibvorgang mit dem aktuellen Offset der Datei. Wenn beim Öffnen der Datei die Option O_APPEND angegeben wird, wird der Dateioffset auf den aktuellen Wert gesetzt Ende der Datei vor jedem Schreibvorgang. Nach einem erfolgreichen Schreibvorgang wird der Dateioffset um die Anzahl der tatsächlich geschriebenen Bytes erhöht. 🎜🎜read()🎜🎜So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf 🎜🎜🎜Rückgabewert🎜: Die Anzahl der gelesenen Bytes 🎜🎜🎜🎜Wenn das Ende der Datei erreicht ist, ist es 0; wenn ein Fehler auftritt, ist es -1; 🎜🎜🎜🎜🎜Parameter🎜🎜🎜 🎜🎜fd: Dateideskriptor zum Lesen von Dateien; 🎜🎜🎜🎜buf: Cache zum Speichern gelesener Daten; 🎜🎜🎜🎜count: Bytes Es ist erforderlich, die Daten einmal zu lesen. Beachten Sie, dass der Rückgabewert die tatsächliche Anzahl der gelesenen Bytes ist und nicht identisch ist. Hinweis: Der Lesevorgang beginnt mit der aktuellen Verschiebung der Datei Vor der erfolgreichen Rückkehr erhöht sich die Verschiebung um die tatsächliche Anzahl der gelesenen Bytes (diese Verschiebung kann selbst festgelegt werden 🎜🎜close()🎜🎜🎜🎜).

Hinweis: Wenn ein Prozess beendet wird, werden alle von ihm geöffneten Dateien automatisch vom Kernel geschlossen.

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

Hinweis: Diese Funktionen ohne Caching sind allesamt Systemaufrufe, die vom Kernel bereitgestellt werden. Dies ist genau der Unterschied zu den E/A-Operationen, die wir in der C-Sprache gelernt haben. Sie sind nicht Teil von Standard C, sondern Komponenten von POSIX .

Standard C arbeitet beim Bearbeiten von Dateien mit dem Strukturzeiger von FILE, und hier wird der Dateideskriptor verwendet.

Der Bereich der Dateideskriptoren beträgt 0-OPEN MAX. Die Obergrenze lag bei 19 (das heißt, jeder Prozess darf 20 Dateien öffnen). Linux ist 1024. Wie viele sind spezifisch? Es kann in der Header-Datei von gefunden werden.

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

Dateideskriptor und Dateizeiger

  • FILE *fdopen(int fd, const char *mode), konvertiert den Dateideskriptor in einen Dateizeiger;

  • int fileno(FILE * stream), konvertieren Sie den Dateizeiger in einen Dateideskriptor;

lseek-Funktion

Funktion: Eine geöffnete Datei suchen

off_t lseek(int fd,off_t offset,int whence);
Nach dem Login kopieren
  • fd: Beschreibung der geöffneten Datei Symbol fd:已经打开的文件描述符;

  • offset:位移量;

  • whence:定位的位置,即基准点

  • SEEK_SET:将该文件的位移量设置为距文件开始处offset个字节;

  • SEEK_CUR:将该文件的位移量设置为其当前值加offset,offset可正可负;

  • SEEK_END

  • offset: Verschiebungsbetrag;

  • woher: Positionierungsposition, also der Referenzpunkt

SEEK_SET : Setzt den Offset der Datei auf Offset-Bytes vom Anfang der Datei;

SEEK_CUR: Setzt den Offset der Datei auf ihren aktuellen Wert plus Offset, der Offset kann positiv oder negativ sein ;

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

SEEK_END: Stellen Sie die Verschiebung der Datei auf die Dateilänge plus Versatz ein. Der Versatz kann positiv oder negativ sein (wenn es zu diesem Zeitpunkt ein positiver Wert ist, handelt es sich bitte um eine Lochfeile siehe unten Erklärung);

Rückgabewert: ** Bei Erfolg die neue Dateiverschiebung (absolute Verschiebung) zurückgeben ** Wenn ein Fehler auftritt, beträgt sie -1, wenn sie am Ende der Datei positioniert wird die Datei kann zurückgegeben werden;

Die Funktion lseek kann auch verwendet werden, um zu bestimmen, ob die Dateideskriptor auf eine Pipe oder einen FIFO verweist, gibt lseek -1 zurück und setzt errno auf EPLPE;

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

hole-Dateibeispiel:

#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>

//生成空洞文件
char *buffer = "0123456789";

int main(int argc,char *argv[])
{
	if(argc < 2)
	{
		fprintf(stderr,"-usage:%s [file]\n",argv[0]);
		exit(1);
	}

	int fd = open(argv[1],O_WRONLY | O_CREATE | O_TRUNC,0777);
	if(fd < 0)
	{
		perror("open error");
		exit(1);
	}

	size_t size = strlen(buffer) * sizeof(char);
	//将字符串写入到空洞文件中
	if(write(fd,buffer,size) != size)
	{
		perror("write error");
		exit(1);
	}
	
	//定位到文件尾部的10个字节处
	if(lseek(fd,10L;SEERK_END) < 0)
	{
		perror("lseek error");
		exit(1);
	}
	//从文件尾部的10个字节处再写入字符串
	if(write(fd,buffer,size) != size)
	{
		perror("write error");
		exit(1);
	}
	close(fd);
	return 0;
}
Nach dem Login kopieren

So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

Wenn wir den Befehl „more“ zum Anzeigen des Dateiinhalts verwenden, stellen wir fest, dass der angezeigte Inhalt nur das Ergebnis des einmaligen Schreibens ist -c Befehl zum Anzeigen des ASSCI-Codes der Datei. Wir werden feststellen, dass zwischen den beiden Inhalten 10 liegen

  • Öffnen Sie eine neue Datei.

  • Lesen Sie einen Teil der ursprünglichen Binärdatei und schreiben Sie ihn in die neue Datei. ) == 0 wird als Bedingung für das Stoppen der Schleife verwendet. Wenn die Schleife nicht gelesen werden kann, bedeutet dies, dass sie abgeschlossen ist Datei, kann der untergeordnete Prozess des Forks den Zugriff mit dem übergeordneten Prozess teilen?

  • Jedes Mal, wenn wir eine Datei öffnen, wird im Kernel eine Struktur wie eine Strukturdatei generiert, um die geöffnete Datei darzustellen und die folgenden Informationen aufzuzeichnen:
  • Dateioffset (beginnend bei 0, Der Dateizeiger-Offset während die Daten geschrieben werden)
  • Referenzanzahl (mehrere Prozesse verwenden diese geöffnete Datei)
  • So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien aufInode-Knoten (speichert die Attributinformationen des Prozesses: Wer hat ihn erstellt, wie lautet der Name, wo ist die Festplatte? gespeichert? Über diesen Inode-Knoten können wir die entsprechende spezifische Datei finden

    close(fd) steht auf der äußersten Seite und sowohl der übergeordnete als auch der untergeordnete Prozess werden geschlossen. Bei jedem Schließen wird der Referenzzähler um 1 verringert, bis er 0 erreicht. So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

    Die Laufergebnisse sind wie folgt:

    So rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf

    Die Gründe sind wie folgt:

    • Test 2: Zuerst forken und dann die Datei öffnen
    • Nach dem Ändern des Codes ändern sich die Laufergebnisse wie folgt :

    • Weil die übergeordneten und untergeordneten Prozesse getrennt sind. Anschließend werden die jeweiligen Dateien geöffnet, die entsprechenden Strukturdateien generiert und Dateioffsets werden nicht mehr gemeinsam genutzt.
    • In tatsächlichen Anwendungsszenarien verwenden wir hauptsächlich Dateien, die vom übergeordneten Prozess und untergeordneten Prozessen geöffnet wurden, um auf dieses Formular zuzugreifen.

    Das obige ist der detaillierte Inhalt vonSo rufen Sie das zugrunde liegende System der Linux-Betriebsdateien auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

    VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

    VSCODE kann die Erweiterung nicht installieren VSCODE kann die Erweiterung nicht installieren Apr 15, 2025 pm 07:18 PM

    Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

    Kann VSCODE für MAC verwendet werden Kann VSCODE für MAC verwendet werden Apr 15, 2025 pm 07:36 PM

    VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

    Wofür ist VSCODE Wofür ist VSCODE? Wofür ist VSCODE Wofür ist VSCODE? Apr 15, 2025 pm 06:45 PM

    VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

    So verwenden Sie VSCODE So verwenden Sie VSCODE Apr 15, 2025 pm 11:21 PM

    Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

    So führen Sie Java -Code in Notepad aus So führen Sie Java -Code in Notepad aus Apr 16, 2025 pm 07:39 PM

    Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

    Was ist der Hauptzweck von Linux? Was ist der Hauptzweck von Linux? Apr 16, 2025 am 12:19 AM

    Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

    So überprüfen Sie die Lageradresse von Git So überprüfen Sie die Lageradresse von Git Apr 17, 2025 pm 01:54 PM

    Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.

    See all articles