Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 7emiliosk8 en 20 Febrero 2017, 00:48 am



Título: Multi procesos en C ?
Publicado por: 7emiliosk8 en 20 Febrero 2017, 00:48 am
Hola, estuve viendo un codigo y tiene muchas funciones que no conozco, getpid getppid fork y otras, pero no encuentro mucha informacion en google respecto a ellas, este tema se llama MULTIPROCESOS ? si es asi hay algun libro o algo donde salga esto para leer y entender mejor el codigo, gracias de antemano

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <unistd.h>
  5.  
  6. #define col 3
  7. #define fil 3
  8.  
  9. pid_t pidHA, pidHB, pidP,pidPHA,pidPHB;
  10.  
  11. int  main()
  12. {
  13. int A[fil][col],B[fil][col],c[fil][col];
  14. int hijoA, hijoB;
  15. int i,j;
  16.  
  17. srand((unsigned)time(NULL));
  18.  
  19. pidP=getpid();
  20. printf("PID del proceso padre  es: %d\n",pidP);
  21.  
  22. hijoA=fork();
  23.  
  24. if(hijoA==-1)
  25. printf("Error al crear proceso");
  26. if(hijoA==0) //hijo
  27. {
  28. pidHA=getpid();
  29. pidPHA=getppid();
  30. printf("PID del proceso HijoA  es: %d, PID proceso padre es: %d \n",pidHA,pidPHA);
  31.  
  32. for(i=0;i<fil;i++)
  33. for(j=0;j<col;j++)
  34. A[i][j]=(rand()%256)+1;
  35.  
  36. for(i=0;i<fil;i++)
  37. {
  38. for(j=0;j<col;j++)
  39. printf("%d\t",A[i][j]);
  40. printf("\n\n");
  41. }
  42. }
  43. else
  44. {
  45. hijoB=fork();
  46. if(hijoB==0) //hijo
  47. {
  48. pidHB=getpid();
  49. pidPHB=getppid();
  50. printf("PID del proceso HijoB  es: %d, PID proceso padre es: %d \n",pidHB,pidPHB);
  51.  
  52. for(i=0;i<fil;i++)
  53. for(j=0;j<col;j++)
  54. B[i][j]=(rand()%10)+1;
  55.  
  56. for(i=0;i<fil;i++)
  57. {
  58. for(j=0;j<col;j++)
  59. printf("%d\t",A[i][j]);
  60. printf("\n\n");
  61. }
  62.  
  63. }
  64. }
  65. wait(0);
  66.  
  67.  
  68.  
  69.  
  70. }


Título: Re: Multi procesos en C ?
Publicado por: MAFUS en 21 Febrero 2017, 11:03 am
Desde C11 está la librería threads. Sirve para programación multihilos nativa en C.

Para multiproceso tienes fork y la familia exec. En inglés hay bastante información.


Título: Re: Multi procesos en C ?
Publicado por: 7emiliosk8 en 22 Febrero 2017, 21:27 pm
Gracias, 1 consulta, que significa C11 ? y hay alguna pagina que conozcas en ingles por ultimo donde salga esto ? lo idea seria un libro pero si no hay  no importa :l


Título: Re: Multi procesos en C ?
Publicado por: engel lex en 23 Febrero 2017, 00:46 am
Gracias, 1 consulta, que significa C11 ? y hay alguna pagina que conozcas en ingles por ultimo donde salga esto ? lo idea seria un libro pero si no hay  no importa :l


https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)#C11 (https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)#C11)

es la ultima versión de C, la del 2011


Título: Re: Multi procesos en C ?
Publicado por: integeroverflow en 24 Febrero 2017, 07:26 am
tambien existe la libreria pthread.

para utilizarla basta con incluir la libreria pthread.h

aca un peque;o ejemplo:

Código:
// gcc hilos.c -pthread
#include <stdio.h>
#include <pthread.h>

pthread_t hilos[5]; // manipuladores de los hilos

void *hilo(void *parametros)
{
     printf("Soy el hilo %d\n", *(int*)parametros);
pthread_exit(NULL); // matamos el hilo
}

int main(void)
{
for(int i=0; i<5; i++)
{
pthread_create(&hilos[i], NULL, hilo, (void*)&i);
// creamos el hilo, el primer parametro es un puntero al manipulador, el tercero es la funcion a la que va a llamar y el ultimo son los parametros. si necesitas multiples parametros podes hacer una estructura y meter todos los param ahi, y castearla a void para recuperarla en el thread.
}
    printf("Listo\n");
}


mas info:

man pthread_create
man pthread_exit


EDIT: me acabo de dar cuenta que hablan de procesos y no de hilos, perdon jaja