Linux que necesita saber programación básica (IV)

  1. BGF depurador
    GDB (depurador de GNU) es un GCC herramientas de depuración. Las funciones son como sigue:

     1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序
     2. 可让被调试的程序在你所指定的调试的断点出停住。(断点可以是条件表达式)
     3. 当程序被停住的时候,可以检查此时你的程序中所发生的事
     4. 动态的改变你程序的运行环境
    
    1. Ajustable genera cuando el archivo GDB en el tiempo de compilación gcc para añadir parámetros -g
    2. Start GDB
      1. Start solamente realice el paso
      2. n (siguiente) ---- siguiente paso
      3. s (paso) ---- en la función interna del cuerpo
      4. c (continuar) ---- aparcado directamente en el punto de interrupción
    3. Ver Código
      1. L (Lista)
      2. L + número de línea
      3. l + nombre de archivo +: + nombre de la función
      4. l + nombre de archivo +: + número de línea
    4. Establecer un punto de interrupción
      1. Establece el punto de interrupción archivo actual
        1. romper + número de fila (rotura se puede abreviar como b)
        2. romper + nombre de la función
      2. Establecer un punto de interrupción archivo especificado
        1. descanso + nombre de archivo + número de línea
        2. Break + nombre + nombre de la función
      3. Establecer puntos de interrupción condicional
        número B + línea + condiciones (si == 15)
      4. Quitar puntos de corte
        del número de punto de interrupción correspondiente +
    5. Ver punto de interrupción conjunto
      info + ruptura (abreviatura: I b)
    6. depuración gdb comenzado (inicio)
      1. Ejecutar la operación paso
      2. n (siguiente) ---- siguiente paso
      3. s (paso) ---- función cuerpo de la lata en el interior
      4. c (continuar) ---- para directamente en el punto de interrupción
    7. escalonamiento
      1. Introducción de las funciones que: s
      2. De adentro hacia afuera función: Acabado (premisa es quitar el cuerpo de la función de punto de interrupción)
      3. Salir del ciclo actual: u
    8. Ver el valor actual de la variable
      p (impresión) + nombre de la variable
    9. Comprobar el tipo de variable
      de tipo p + nombre de la variable
    10. Establecer el valor de la variable de
      conjunto var + nombre de la variable + "=" + valor (evitar la espera)
    11. Establecer la variable de seguimiento
      1. pantalla + nombre de la variable
      2. Presentación de info + (variables de traza pantalla)
      3. undislay + número de seguimiento de variables
    12. Salir depurador GDB
      dejar de fumar
  2. Escribir un makefile

    1. cuando el comando make, se necesita un makefile para decirle qué comandos deben hacer para compilar y vincular el programa.
      makefile dice al comando make cómo compilar y vincular estos documentos, la regla es:

      1. Si este proyecto no se compila, entonces todo el archivo c debe ser compilado y enlazado
      2. Unos archivos C se modifican si esto funciona, compilador de C entonces sólo modificamos, y el enlace con el programa de destino
      3. Si se cambia el archivo de cabecera del proyecto, a continuación, sólo tenemos que crear el archivo C se hace referencia a varios archivos de cabecera y el programa de destino del enlace
      4. Mientras el makefile a escribir bien, todo esto sólo se puede hacer con un comando de maquillaje, maquillaje de comandos puede determinar automáticamente los cuales se tienen que recompilar basado en la modificación del archivo actual archivos, por lo que para compilar los documentos requeridos y programa de destino del enlace
    2. makefile nomenclatura
      de archivo MAKE algunos que makefile

    3. regla makefile (el contenido básico del makefile)

       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. Un ejemplo
      . 1) guía de prueba:
      Aquí Insertar imagen Descripción
      2) contenido del makefile:
      Aquí Insertar imagen Descripción
      3) hacer que la entrada en el comando de comando de directorio de prueba ejecuta el comando, y genera un archivo ejecutable principal
      4) introduzca el comando:. ./ principal
      Aquí Insertar imagen Descripción

    5. el trabajo maquillaje
      en el modo por defecto, es decir, que acabamos de escribir make, realice los siguientes pasos:

      1. make'll encontrar el nombre "Makefile" o archivo "Makefile" en el directorio actual
      2. Si lo encuentra, que iba a encontrar el archivo en el archivo primer objetivo (objetivo), y el objetivo final de este documento como archivo
      3. Modificado Si no existe el archivo de destino, o el archivo de objeto depende .o ficheros objeto archivo de la nueva, entonces él va a ejecutar el comando definido más adelante para generar un archivo de objeto
      4. Así que si el archivo de destino en el .o existen archivos, marca buscará el archivo de destino en el archivo actual es file .o dependiente, si se encuentra a continuación, genera .o archivo (que se parece a un proceso de pila) de acuerdo con una regla que
        Aquí Insertar imagen Descripción
      5. Existen archivos de C y H archivos, así que se genera un archivo .o, y luego usar el archivo .o tareas de generación hacen que el final, que es el archivo de destino
    6. Utilizar las variables en el makefile

      1. las variables ordinarias
        1. Cuando el makefile se complica, fácil de mantener en el Makefile orden en el makefile que podemos utilizar variables, variables makefile que es una cadena
          Aquí Insertar imagen Descripción
        2. Por una serie de variables en el makefile formato de mantenimiento por lo general se escribe con mayúscula.
          1. Algunas variables tienen un valor por defecto (CC: El valor por defecto cc cc == gcc)
          2. Algunas variables no predeterminadas
            1. CPPFLAGS: Opciones para pre-necesidad tales como: -I
            2. CFLAGS: tiempo de compilación usando el parámetro -c -Wall -g
            3. LDFLAGS: Opción -L-biblioteca de enlace utilizado por -l
        3. El usuario también puede modificar los valores de estas variables (CC = gcc)
      2. Las variables automáticas
        1. Variables:
          A) $ @ - >> normas de destino
          b) $ <- >> primera regla dependencias
          c) $ ^ - todos los archivos dependientes >> reglas
        2. reglas de modo:
          A) de destino% utilizando reglas definidas en
          b) en% usado en las dependencias de reglas
          Aquí Insertar imagen Descripción
    7. hacer la derivación automática de
      GNU make es muy potente, que puede archivos de comandos de forma automática derivar y las relaciones de dependencia atrás, que ven un archivo .o, añadía el archivo .c a la dependencia, y más tarde será deducido salir
      Aquí Insertar imagen Descripción

    8. contenidos dentro makefile:
      makefile que contiene cinco elementos principales: reglas de visualización, reglas oscuras, las definiciones de variables, las instrucciones y los comentarios del archivo

      1. Mostrar regla: reglas muestra explica cómo generar uno o más ficheros objeto. Esto está claramente indicado por el escritor makefile, se basa en generar archivos, generar comandos
      2. regla oscura: Desde que tomamos la función de derivación automática, tan oscura regla nos permite makefile escritura áspera, que es apoyado por la marca de
      3. La definición de variables: en el makefile tenemos que definir un conjunto de variables, que son generalmente cadenas, cuando makefile se ejecuta, en la que las variables se extenderán a la posición de referencia correspondiente
      4. De archivo indica: tres partes:
        1. Otro citó un makefile makefile (como C lenguaje incluir)
        2. En algunos casos la parte activa designado de acuerdo con el makefile (como el lenguaje C como #if compilarán previamente)
        3. La definición de un comando de múltiples líneas
      5. Notas: Sólo los comentarios de línea makefile, ese comentario es "#" carácter, si desea utilizar el carácter "#" para ser escapado con una barra invertida, como por ejemplo: "/ #"
        comando en el archivo MAKE, hay que partir de la tecla de tabulación
    9. makefile dos funciones de
      la makefile Cada función tiene un valor de retorno

      1. Obtiene el archivo .c directorio especificado
        src = $ (comodín ./ .c)
        función llamada comodín
        directorio ./
        .c (todos los archivos .c actuales en el directorio)
        $ para el valor de la adquisición valor devuelto
      2. Alternativamente .o archivos .c en el archivo
        (patsubst ./%.c, ./%.o obj = $ , src) $ ()
        función llamada patsubst
        archivo ./%.c es C
        ./%.o es O archivo
        $ (src) almacenado en el interior archivo .c
        Aquí Insertar imagen Descripción
    10. * Eliminar .o archivos y archivos de objetos (archivos temporales medio claro) (Introduzca el comando en el terminal: make clean ejecutará el archivo MAKE en rm $ (obj) $ (objetivo ) f)
      Aquí Insertar imagen Descripción
      el papel del parámetro -f: es obligatorio la ejecución de la orden anterior

    11. Pseudotarget

      1. La razón por
        la limpieza comando make no genera un archivo en el directorio actual, tan limpio como el pseudo-objetiva, si se crea un archivo limpio en el documento actual, en la ejecución del comando make limpia le pedirá " 'limpia' es hasta la fecha " , no va a ser ejecutado "rm $ (obj) $ ( objetivo) -f" este comando
      2. Solución:
        En un objetivo seudo declarada previamente limpio, limpio
        Aquí Insertar imagen Descripción
  3. io función del sistema de
    formato para ver el archivo: archivo de nombre de archivo +

    1. funciones de biblioteca IO C Flujo de trabajo
      Aquí Insertar imagen Descripción

    2. pcb y descriptores de archivos
      Aquí Insertar imagen Descripción

    3. espacio de direcciones virtuales
      Aquí Insertar imagen Descripción

    4. ¿Por qué CPU a usar el espacio de direcciones virtuales y mapeo espacio de direcciones físicas? Lo resolvió el problema?

      1. compiladores y sistemas operativos convenientes Programador de distribución de direcciones.
        El programa puede usar una serie de direcciones virtuales adyacente a la memoria física de acceso no contiguas en la memoria intermedia grande
      2. Aislamiento entre fácil de proceso
        de direcciones virtuales diferentes procesos utilizados en el aislamiento de la otra, un proceso no puede cambiar el código en la memoria física siendo utilizado por otro proceso
      3. Fácil de usar la memoria del sistema operativo
        puede utilizar una serie de direcciones virtuales para acceder a la memoria intermedia mayor que la memoria física disponible. Cuando el suministro de memoria física se hace más pequeño, el administrador de memoria será páginas de memoria física (por lo general el tamaño es de 4 KB) guardado en un archivo de disco
    5. La relación entre las funciones de biblioteca y funciones del sistema
      Aquí Insertar imagen Descripción
      f. Función (abrir, leer, escribir, lseek , cerca)

       查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
      

El siguiente es el autor de la micro-canales número público, atención de bienvenida, continuará actualizando C ++, Python, tensorflow, la máquina de aprendizaje, el aprendizaje profundo, la visión artificial y otros artículos, No. pública contiene más de 300 este PDF libros electrónicos, sin duda lo que necesita uno, usted puede recibir la atención pública No. Oh.
Aquí Insertar imagen Descripción
Si usted está interesado en los aspectos de JAVA, puede centrarse en el número público siguientes JAVAERS, acompañe a aprender juntos, crecer juntos, compartiendo la poesía y la carretera JAVA distantes entre sí. En la que los números públicos son amigo JAVA de este mundo, el público tendrá artículos técnicos de números todos los días, por la superficie seca, sino también la arquitectura avanzada de libros electrónicos, tales como el combate primavera, SpringBoot práctica, MySQL de alto rendimiento, la comprensión en profundidad de la JVM, combate RabbitMQ , diseño Redis e implementación de una serie de libros de alta calidad y así sucesivamente, que pueden recibir la atención pública No. Oh.
Aquí Insertar imagen Descripción

Publicado 43 artículos originales · ganado elogios 129 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/Xiao_Jie123/article/details/105252336
Recomendado
Clasificación