Linux benötigen Sie grundlegende Programmierung (IV) wissen

  1. GDB - Debugger
    GDB (GNU Debugger) ist ein GCC Debugging - Tools. Funktionen sind wie folgt:

     1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序
     2. 可让被调试的程序在你所指定的调试的断点出停住。(断点可以是条件表达式)
     3. 当程序被停住的时候,可以检查此时你的程序中所发生的事
     4. 动态的改变你程序的运行环境
    
    1. Einstellbare erzeugt, wenn die GDB-Datei in gcc Kompilierung hinzuzufügen Parameter -g
    2. Start GDB
      1. Starten nur durchführen , Schritt
      2. n (next) ---- nächsten Schritt
      3. S (Schritt) ---- in die interne Funktion des Körpers
      4. c (continue) ---- geparkt direkt in dem Haltepunkt
    3. Siehe - Code
      1. L (List)
      2. L + Zeilennummer
      3. l + Dateiname +: + Funktionsname
      4. l + Dateiname +: + Zeilennummer
    4. Setzen Sie einen Haltepunkt
      1. Setzt die aktuelle Datei Unterbrechungs
        1. brechen + Zeilennummer (BREAK kann als b abgekürzt)
        2. brechen + Funktionsnamen
      2. Legen Sie einen Haltepunkt angegebene Datei
        1. Pause + Dateiname + Zeilennummer
        2. Pause + Dateiname + Funktionsnamen
      3. Stellen Sie bedingte Haltepunkte
        b + Zeilennummer + Bedingungen (wenn ich == 15)
      4. Entfernen Sie Stützpunkte
        del + Haltepunkt entsprechenden Anzahl
    5. Siehe Unterbrechungs Set
      Info + Pause (Abkürzung: I b)
    6. Gestartet GDB-Debugging (Start)
      1. Ausführen Schrittbetrieb
      2. n (next) ---- nächster Schritt
      3. s (Schritt) ---- Funktion Dosenkörper in den Innenraum
      4. c (continue) ---- hält direkt am Haltepunkt
    7. Stepping
      1. Die Eingabe der Funktionen, dass: s
      2. Von innen nach außen Funktion: Ziel (Voraussetzung ist die Unterbrechungsfunktion Körper zu entfernen)
      3. Verlassen Sie den aktuellen Zyklus: u
    8. Den aktuellen Wert der Variablen
      p (Druck) + Variablennamen
    9. Check Variablentyp
      ptype + Variablenname
    10. Stellen Sie den Wert der Variablen
      Satz var + Variablenname + „=“ + Wert (avoid Warte)
    11. Stellen Sie das Tracking-Variable
      1. Anzeige + Variablenname
      2. Info + Display (Display-Trace-Variablen)
      3. undislay + Tracking Zahl von Variablen
    12. Beenden Sie GDB - Debugger
      beenden
  2. Schreiben Sie eine Make-Datei

    1. wenn der Befehl make, benötigen Sie eine Make - Datei machen , um zu sagen , welche Befehle müssen das Programm zu kompilieren und zu verknüpfen.
      Make - Datei den Befehl make sagt , wie diese Dokumente zu kompilieren und zu verknüpfen, wird die Regel:

      1. Wenn dieses Projekt nicht kompiliert wird, dann ist die ganze c-Datei muss kompiliert und verknüpft werden
      2. Einige C-Dateien geändert werden, wenn dies funktioniert, dann ich modifizierte C-Compiler nur, und Verbindung mit dem Zielprogramm
      3. Wenn das Projekt Header-Datei geändert wird, dann brauchen wir nur die C-Datei zu erstellen ist mehrere Headerdateien und Linkzielprogramm verwiesen
      4. Solange die Make-Datei nur ein guten, alles zu schreiben, kann mit einem Befehl make erfolgen kann make-Befehl automatisch bestimmen, welche Dateien neu kompiliert werden müssen, basierend auf der aktuellen Dateiänderung, so die erforderlichen Unterlagen zusammenzustellen und Link Zielprogramm
    2. Make - Datei Nomenklatur
      Makefile einige , die makefile

    3. Make-Datei Regel (der Kerninhalt der Make-Datei)

       1. Target…:prerequisites…
       		Command
       		…
       		…
       2. target也就是一个目标文件,可以是object File,也可以是执行文件,还可以是一个标签(Label)
       prerequisites就是,要生成那个target所需要的文件或是目标
       command就是make需要执行的命令。(任意的Shell命令)
       3. 这是一个文件的依赖关系,target这一个或多个的目标文件依赖于prerequisittes中的文件,其生成规则定义在command中。说白一点,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
       4. 在定义好依赖关系以后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。make并不管命令是如何工作的,他只管执行所定义的命令。make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么make就会执行后面的命令
      
    4. Ein Beispiel
      . 1) Testverzeichnis:
      Hier hat Bild einfügen Beschreibung
      2) Inhalt der Make - Datei:
      Hier hat Bild einfügen Beschreibung
      3) , um die Eingabe in dem Testverzeichnisbefehl Befehl führt den Befehl aus und erzeugt eine ausführbare Haupt
      4) den Befehl eingeben. ./ Haupt
      Hier hat Bild einfügen Beschreibung

    5. make Arbeit
      im Standard - Modus, das heißt, wir geben Sie einfach machen, die folgenden Schritte ausführen:

      1. make'll den Namen „Makefile“ oder „Make-Datei“ Datei im aktuellen Verzeichnis finden
      2. Wenn sie gefunden wird, würde er die Datei in der ersten Zieldatei (Ziel), und das ultimative Ziel dieses Dokuments als Datei finden
      3. Modifizierte Wenn die Zieldatei nicht vorhanden ist, oder die Objektdatei hängt .o-Datei Objektdateien als die neuen, dann wird ausgeführt, er den Befehl später definierte eine Objektdatei zu erzeugen,
      4. Also, wenn die Zieldatei auf die .o-Dateien vorhanden sind, machen für die Zieldatei in der aktuellen Datei aussehen wird, hängt .o-Datei, gefunden, wenn erzeugt dann .o-Datei (die aussieht wie ein Stapel-Prozess) in Übereinstimmung mit der Regel, dass
        Hier hat Bild einfügen Beschreibung
      5. C H Dateien und Dateien vorhanden ist, so stellt eine .o-Datei erzeugt, und dann verwenden, um die Datei .o Generation Aufgaben die ultimative machen, die die Zieldatei
    6. Verwenden Sie die Make-Datei Variablen

      1. gewöhnliche Variablen
        1. Wenn die Make-Datei kompliziert wird, einfach, um Make-Datei in der Make-Datei pflegen wir Variablen, Makefile-Variable verwenden können, ist eine Zeichenfolge
          Hier hat Bild einfügen Beschreibung
        2. Durch eine Reihe von Variablen makefile Wartung Format in der Regel aktiviert wird.
          1. Einige Variablen haben einen Standardwert (CC: Der Standardwert cc cc == gcc)
          2. Einige Variablen kein Standard
            1. CPPFLAGS: Pre-need-Optionen wie: -I
            2. CFLAGS: Kompilierung mit dem Parameter -c -Wand -g
            3. LDFLAGS: Option -L-Link-Bibliothek, die von -l
        3. Der Benutzer kann auch die Werte dieser Variablen ändern (CC = gcc)
      2. automatische Variablen
        1. Variablen:
          A) $ @ - >> Ziel Regel
          b) $ <- >> erste Regel Abhängigkeiten
          c) $ ^ - alle abhängigen Dateien >> Regeln
        2. Modus Regeln:
          A)% -Ziel definiert unter Verwendung von Regeln in
          b) in% in der Regel Abhängigkeiten verwendet
          Hier hat Bild einfügen Beschreibung
    7. macht automatische Ableitung von
      GNU make sehr mächtig ist, kann er automatisch derive Befehlsdateien und Abhängigkeiten hinter, sehen sie eine .o - Datei, würde er die C - Datei in die Abhängigkeit, hinzufügen und später wird geschlossen kommen
      Hier hat Bild einfügen Beschreibung

    8. Make - Datei Inhalt in:
      Make - Datei , die fünf wichtigste Dinge enthält: Anzeigeregeln, obskure Regeln, Variablendefinitionen, Anweisungen und Dateikommentare

      1. Zeigte Regel: Zeigt Regel erklärt, wie eine oder mehr Objektdateien zu erzeugen. Dies wird eindeutig durch die Make-Datei Schriftsteller angegeben, es auf verlässt sich Dateien zu generieren, erzeugen Befehle
      2. Obscure Regel: Da wir die automatische Ableitungsfunktion machen, so obskure Regel erlaubt es uns, grobes Schreiben Make-Datei, die von der Marke der unterstützt wird
      3. Die Definition der Variablen: in der Make-Datei haben wir eine Reihe von Variablen zu definieren, die im Allgemeinen Strings sind, wenn Make-Datei ausgeführt wird, in der die Variablen zu der entsprechenden Referenzposition ausgefahren werden
      4. Datei zeigt an: drei Teile:
        1. Ein weiteres zitierte eine Make-Datei Make-Datei (wie C-Sprache enthält)
        2. In einigen Fällen können der aktive Teil nach der Make-Datei bezeichnet (wie C-Sprache als vorkompilierte # if)
        3. Die Definition eines mehrzeiligen Befehl
      5. Hinweise: Nur die Make - Datei Zeile Kommentare, dass Kommentar ist Zeichen „#“, wenn Sie das Zeichen „#“ verwenden mögen , mit einem umgekehrten Schrägstrich, wie entronnen sein: „/ #“
        Befehl in der Make - Datei, müssen wir mit der Tab - Taste starten
    9. Makefile zwei Funktionen der
      Makefile Jede Funktion hat einen Rückgabewert

      1. Rufe die angegebene Verzeichnis C - Datei
        src = $ (Wildcard ./ .c)
        Funktion Wildcard genannt
        Verzeichnis ./
        .c (alle aktuellen .c Dateien in dem Verzeichnis)
        $ für den Wert der zurückgegebenen Werterfassung
      2. Alternativ .o .c - Dateien in die Datei
        obj = $ (patsubst ./%.c, ./%.o , $ (src))
        Funktion patsubst genannt
        ./%.c Datei ist c
        ./%.o o ist Datei
        $ (src) innerhalb C - Datei gespeichert
        Hier hat Bild einfügen Beschreibung
    10. Löschen * .o Dateien und Objektdateien (temporäre Dateien löschen Mitte) (Geben Sie den Befehl im Terminal: sauber machen wird ausgeführt , der Make - Datei in rm $ (obj) $ (Ziel ) bis f)
      Hier hat Bild einfügen Beschreibung
      die Rolle des Parameters -f: ist obligatorisch die Umsetzung des vorherigen Befehls

    11. Pseudotarget

      1. Der Grund ,
        der Befehl make clean eine Datei nicht im aktuellen Verzeichnis generiert, so sauber wie den Pseudo-Ziel, wenn Sie eine saubere Datei im aktuellen Dokument, bei der Umsetzung von make clean Befehl fordert erstellen „‚sauber‘ist auf dem neuesten Stand “ , wird nicht ausgeführt "rm $ (obj) $ (werden -f Ziel)" diesen Befehl
      2. Lösung:
        In einem zuvor erklärt sauber, sauber Pseudoziel
        Hier hat Bild einfügen Beschreibung
  3. Io Funktion der
    Systemdatei + Dateiname: Format die Datei anzuzeigen

    1. IO C-Bibliotheksfunktionen Workflow
      Hier hat Bild einfügen Beschreibung

    2. pcb und Filedeskriptoren
      Hier hat Bild einfügen Beschreibung

    3. Der virtuelle Adressraum
      Hier hat Bild einfügen Beschreibung

    4. Warum CPU in den virtuellen Adressraum und physikalischen Adressraum-Mapping verwenden? Was das Problem gelöst?

      1. Praktische Compiler und Betriebssysteme Scheduler Adressen Verteilung.
        Das Programm kann eine Reihe von benachbarten virtuellen Adresse für den Zugriff nicht zusammenhängenden physischen Speicher in großen Speicherpuffer verwenden
      2. Isolation zwischen einfachen Prozess
        virtueller Adresse verschiedenen Prozessen verwendeten isoliert voneinander ist, kann ein Prozess den Code nicht im physischen Speicher ändert von einem anderen Prozess verwendet werden ,
      3. Einfache Betriebssystemspeicher zu verwenden ,
        eine Reihe von virtuellen Adressen verwenden kann , auf den Speicher zuzugreifen Puffer größer als die verfügbaren physischen Speicher. Wenn der Zufuhr des physikalischen Speichers kleiner wird, wird der Speichermanager physische Speicherseiten werden in eine Datei gespeichert ( in der Regel einer Größe von 4 KB ist)
    5. Die Beziehung zwischen Bibliotheksfunktionen und Systemfunktionen
      Hier hat Bild einfügen Beschreibung
      f. Funktion (Öffnen, Lesen, Schreiben, lseek , in der Nähe)

       查man文档(man 2 + 函数名称)
       	errno:
       		1) 是一个全局变量(任何标准C库函数都能对其进行修改(Linux系统函数更可以))
       		2) 错误信息定义的位置:
       			a) 第1-34个错误定义:
       			/usr/include/asm-gengric/errno-base.h
       			b) 地35-133个错误定义:
       			/usr/include/asm-generic/errno.h
       		3) 是记录系统的最后一次错误代码,代码是一个int型的值
       			a) 每个errno值对应着以字符串表示的错误类型
       			b) 当调用“某些”函数出错时,该函数会重新设置errno的值
       		4) perror
       			a) 头文件:stdio.h
       			b) 函数定义:void perror(const char * s)
       			c) 函数说明:
       				i) 用来将上一个函数发生错误的原因输出到标准设备(stderr)
       				ii) 参数s所指的字符串会先打印出,后面在加上错误原因字符串
       				iii) 此错误原因依照全局变量errno的值来决定要输出的字符串
       	1. open
       		1) 头文件:
       			a) #include<sys/types.h>
       			b) #include<sys/stat.h>
       			c) #include<fcntl.h>
       		2) 函数定义
       			a) int open(const char * pathname,int flags);
       			b) int open(const char * pathname,int flags,mode_t mode)
       		3) 函数说明(用来打开一个存在或者打开一个不存在的文件)
       		4) 参数说明:
       			a) pathname:打开文件的路径(绝对路径或者是相对路径)
       			b) flags:文件的打开方式
       				i) the argument flags must include one of the following access modes:O_RDONLY,O_WRONLY,or O_RDRW.This request opening the file read-only,write-only,or read/write, respectively
       				ii) in addition,zero or more file creation flags and file status flags can be bitwise-or'd in flags. The file creation flags are O_CLOEXEC,O_CREAT,O_DIRECTORY,O_EXCL,O_NOCTTY,O_NOFOLLOW,O_TEPFILE, and O_TRUNC. The file status flags are all of the remaining flags listed below. The distinction between these two groups id flags is that the file status flags can be retricved and (in some cases) modified.
       			c) mode:指文件创建后的权限
       				注意:文件的实际权限 = 创建文件是给定的权限 & 本地掩码取反
       				查看掩码umask
       				修改掩码umask + 三位的八进制数
       		5) 函数返回值:
       			open() return the new file descriptor, or -1 if an error occurred (in which case,errno is set appropriately).
       	2. read
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义
       			a) ssize_t read(int fd,void *buf,size_t count)
       				i) size_t是无符号的整数
       				ii) ssize_t是有符号的整数
       		3) 函数说明
       			a) read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf
       		4) 参数说明
       			a) fd:文件描述符
       			b) buf:缓冲区
       			c) count:缓冲区的大小
       		5) 函数返回值
       			a) on success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number. It is not an error if this number is smaller than number of bytes requested; this may happen for example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted by a signal
       			b) on error, -1 is returned, and errno is set appropriately. In this case, it is left unspecified whether the file position (if any) changes
       	3. write
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义:
       			a) Ssize_t write(int fd, const void * buf, size_t count)
       				i) Size_t是无符号的整数
       				ii) Ssize_t是有符号的整数
       		3) 函数说明:
       			a) write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd
       		4) 参数说明:
       			a) fd:文件描述符
       			b) buf:缓冲区
       			c) count:写的位置
       		5) 函数返回值:
       			a) on success, the number of bytes written is returned (zero indicates nothing was written). It is not an error if this number is smaller than the number of bytes requested; this may happen for example because the disk device was filled.
       			b) on error, -1 is returned,and errno is set appropriately
       	4. lseek(获取文件大小、移动文件指针、文件拓展)
       		1) 头文件:
       			a) #include<sys/types.h>
       			b) #include<unistd.h>
       		2) 函数定义:
       			a) off_t lseek(int fd,off_t offset,int whence)
       		3) 函数说明:以指定的位置打开文件
       		4) 参数说明:
       			a) fd:文件描述符
       			b) offset:文件偏移量
       			c) whence:
       				i) SEEK_SET(the offset is set to offset bytes)
       				ii) SEEK_CUR(the offset is set to its current location plus bytes)
       				iii) SEEK_END(the offset is set to the size of the file plus offset byte)
       		5) 函数返回值:
       			a) upon successful completion,lseek() returns the resulting offset location as measured in bytes from the beginning of the file.
       			b)  on error, the value (off_t) -1 is returned and errno is set to indicate the error
       	5. close
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义
       			a) int close(int fd);
       		3) 函数说明:关闭一个已经打开的文件
       		4) 参数说明:
       			a) fd:文件描述符
       		5) 函数返回值:
       			close() returns zero on success. On error, -1 is returned, and errno is set appropriately
       		6) 错误类型:
       			a) EBADF: fd isn't a valid open file descriptor
       			b) EINTR: The close() call was interrupted by a signal
       			c) EIO:An I/O error occurred
      

Im Folgenden ist der Autor des Mikrokanals öffentliche Zahl, willkommen Aufmerksamkeit, zu aktualisieren c fortgesetzt ++, Python, tensorflow, maschinelles Lernen, tiefgreifendes Lernen, Computer Vision und andere Gegenstände, die öffentliche Nr enthält 300+ dieses pdf e-Bücher, sicher Sie brauchen ein, können Sie die Aufmerksamkeit der Öffentlichkeit Nr Oh erhalten.
Hier hat Bild einfügen Beschreibung
Wenn Sie in JAVA Aspekten interessiert sind, können sich auf der folgenden JAVAERS öffentliche Nummer konzentrieren, begleiten Sie lernen zusammen, zusammen wachsen, Poesie und fernen JAVA Straße teilen zusammen. In denen öffentliche Zahlen JAVA Freund dieser Welt, wird die öffentliche Nummer-technische Artikel haben jeden Tag, durch die trockene Oberfläche, sondern auch die fortschrittliche Architektur von E-Büchern, wie Spring Kampf, SpringBoot praktische, leistungsstarke MySQL, in einem tiefen Verständnis von JVM, RabbitMQ Kampf , Redis Design und Umsetzung einer Reihe von qualitativ hochwertigen Büchern und so weiter, können Sie die Aufmerksamkeit der Öffentlichkeit Nr Oh erhalten.
Hier hat Bild einfügen Beschreibung

Veröffentlicht 43 Originalarbeiten · erntete Lob 129 · betrachtet 10000 +

Ich denke du magst

Origin blog.csdn.net/Xiao_Jie123/article/details/105252336
Empfohlen
Rangfolge