Las noticias de la tienda de computadoras introducen primero lo que es un subproceso. La mayoría de los programas que escribimos pueden considerarse como de un solo subproceso. El programa se ejecuta en un cierto orden. Si usamos subprocesos, el programa creará una línea en nuestra línea. El lugar se bifurca y se convierte en dos "programas" en ejecución. Aproximadamente parece ser similar al proceso secundario, pero no lo es. El proceso secundario se ejecuta copiando el espacio de direcciones del proceso principal. El hilo es compartido por El código del programa a ejecutar, el punto popular es que el mismo código del subproceso se ejecutará varias veces. La ventaja de usar el subproceso es que puede ahorrar recursos, ya que el subproceso lo comparte, por lo que la programación del proceso no es tan complicada. El uso de la creación de subprocesos se implementa mediante las siguientes funciones: #include < pthread.h > int pthread_create (pthread_t * thread, pthread_attr_t * attr, void * (* start_routine) (void *), void * arg); Void pthread_exit (void * retval); int pthread_join (pthread * thread, void ** thread_return); pthread_create crea un hilo, el hilo se usa para indicar el ID del hilo creado, attr Indique los atributos cuando se crea el hilo, usamos NULL para indicar el uso del atributo predeterminado. El puntero de la función start_routine es la función que comienza a ejecutarse después de que el hilo se crea correctamente, arg es el único parámetro de esta función. Indica el parámetro que se pasó a start_routine. Pthrea d_exit function La función de salida es similar a salir del subproceso. Esta función finaliza el subproceso, libera los recursos de la función y bloquea al final hasta que otros subprocesos lo esperen mediante la función pthread_join. Luego pasa el valor de * retval a ** thread_return. Desde que se libera esta función, Los recursos de la función, por lo que retval no puede apuntar a la variable local de una función. Pthread_join se usa para esperar el hilo especificado como la llamada en espera. Vamos a usar un ejemplo para explicar el uso. En la práctica, a menudo tenemos que hacer una copia de seguridad de algunos archivos. Se puede hacer una copia de seguridad de todos los archivos del directorio actual. El sufijo de copia de seguridad se llama bak #include < stdio.h > #include < unistd.h > #include < stdlib.h > #include &string; string.h > # Incluir < errno.h > #include < pthread.h > #include < dirent.h > #include < fcn Tl.h > #include < sys /types.h > #include < sys /stat.h > #include < sys /time.h > #define BUFFER 512 struct copy_file {int infile; int outfile;}; void * copy (void * arg) {int infile, outfile; int bytes_read, bytes_write, * bytes_copy_p; char buffer [BUFFER], * buffer_p; struct copy_file * file = (struct copy_file *) arg; infile = file- > infile; Outfile = file- > outfile; /* Como el subproceso sale, se libera todo el espacio variable, así que tenemos que asignar memoria nosotros mismos * /if ((bytes_copy_p = (int *) malloc (sizeof (int))) == NULL) pthread_exit (NULL); bytes_read = bytes_write = 0; * bytes_copy_p = 0; /* Recuerde cómo copiar los archivos * /while ((bytes_read = read (infile, buffer, BUFFER))! = 0) {if ((bytes_read == - 1) &&(errno! = EINTR)) break; else if (bytes_read > 0) {buffer_p = buffer; while ((bytes_write = write (outfile, buffer_p, bytes_read))! = 0 {if ((bytes_write == - 1) &&(errno! = EINTR)) break; else if ((bytes_write == bytes_read) break; else if (bytes_write > 0) {buffer_p + = bytes_write; bytes_read- = bytes_wr Es decir,}} if (bytes_write == - 1) break; * bytes_copy_p + = bytes_read;}} close (infile); close (outfile); pthread_exit (bytes_copy_p);} int main (int argc, char ** argv) {pthread_t * thread; struct copy_file * file; int byte_copy, * byte_copy_p, num, i, j; nombre de archivo char [BUFFER]; struct dirent ** namelist; struct stat filestat; /* Obtener todos los archivos (incluidos los directorios) en la ruta actual Número * /if ((num = scandir (". &Quot;, &namelist, 0, alphasort)) < 0) {fprintf (stderr, " Error de número de archivo:% s \\ n \\ a " Strerror (errno)); salida (1)
Según informes de medios extranjeros, quizás muchos usuarios, como el autor, se hayan interesado en
Cuando hicimos el experimento, grabamos el archivo bin en la tarjeta SD, como el experimento de la l
Matthew Garrett, desarrollador principal de Red Hat, publicó un artículo en el que Fedora 18 present
Noticias de la tienda de computadoras: De acuerdo con el último informe de un sitio web de tecnologí
Comando dividido de división de archivos grandes de Linux
DirectAdmin habilita HTTP /2 support
CentOS 6.4 instala la preparación del entorno oracle 11G
Una breve historia del desarrollo del sistema operativo Linux
Virtualbox Virtual XP Process bajo el sistema de Ubuntu
Mira un comando del sistema operativo Linux para entender una civilización humana
Tutorial de la tarjeta de red de configuración de Linux
Artículo destacado: Tres debilidades entre Linux y Windows
Sistema de Linux centos cierre y reinicio del comando detallado
Función de suspensión en Linux, función de fflush y problema de búfer
¿Cómo desbloquear la barra de tareas del sistema Win10 ocultar automáticamente?
¿Qué son los servicios del sistema Win7?
El límite del comando CMD del sistema Win7 se cancela Cómo resolver el indicador de comandos del
Sistema Win7 Bluetooth no puede encontrar cómo hacerlo?
¿Cómo hace win8 para activar los efectos aero
Linux configurado el servidor SSH basada tutorial
¿Cómo usar la aplicación financiera que viene con Win10 Preview?
La red inalámbrica del sistema Lenovo notebook win7 no se puede usar. Código de error 1067