Multi procesos en C ?

Iniciado por 7emiliosk8, 20 Febrero 2017, 00:48 AM

0 Miembros y 1 Visitante están viendo este tema.

7emiliosk8

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


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#define col 3
#define fil 3

pid_t pidHA, pidHB, pidP,pidPHA,pidPHB;

int  main()
{
int A[fil][col],B[fil][col],c[fil][col];
int hijoA, hijoB;
int i,j;

srand((unsigned)time(NULL));

pidP=getpid();
printf("PID del proceso padre  es: %d\n",pidP);

hijoA=fork();

if(hijoA==-1)
printf("Error al crear proceso");
if(hijoA==0) //hijo
{
pidHA=getpid();
pidPHA=getppid();
printf("PID del proceso HijoA  es: %d, PID proceso padre es: %d \n",pidHA,pidPHA);

for(i=0;i<fil;i++)
for(j=0;j<col;j++)
A[i][j]=(rand()%256)+1;

for(i=0;i<fil;i++)
{
for(j=0;j<col;j++)
printf("%d\t",A[i][j]);
printf("\n\n");
}
}
else
{
hijoB=fork();
if(hijoB==0) //hijo
{
pidHB=getpid();
pidPHB=getppid();
printf("PID del proceso HijoB  es: %d, PID proceso padre es: %d \n",pidHB,pidPHB);

for(i=0;i<fil;i++)
for(j=0;j<col;j++)
B[i][j]=(rand()%10)+1;

for(i=0;i<fil;i++)
{
for(j=0;j<col;j++)
printf("%d\t",A[i][j]);
printf("\n\n");
}

}
}
wait(0);




}

MAFUS

#1
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.

7emiliosk8

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

engel lex

Cita de: 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


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

es la ultima versión de C, la del 2011
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

integeroverflow

tambien existe la libreria pthread.

para utilizarla basta con incluir la libreria pthread.h

aca un peque;o ejemplo:


// 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