Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #define MAGNITUD 32
- int i = 0;
- int n[5];
- int pipa[2];
- void pthread_exit(void *retval);
- void *servidor()
- {
- int seleccion;
- int pidel;
- printf("Menu del Servidor \n");
- printf("Presione 1 si quiere mostrar la lista de los procesos conectados al servidor \n");
- printf("Presione 2 si quiere eliminar un proceso \n");
- printf("Presione 3 si quiere detener el sistema completo \n");
- printf("Presione 4 si quiere salir \n");
- while(1){
- scanf("%d",&seleccion);
- if(seleccion == 1){
- printf("se mostrara la lista de los procesos conectados al servidor \n");
- for(i = 0; i < 5; i++){
- printf("%d ", n[i]);
- }
- printf("\n Volvio al menu, seleccione otra opcion\n");
- }
- else if(seleccion == 2){
- printf("inserte el pdi del cliente que quiere eliminar\n");
- scanf("%d ",&pidel);
- for(i = 0; i < 5; i++){
- if(n[i]== pidel){
- printf("se elimino \n");
- n[i] = 0;
- }
- }
- printf("Volvio al menu, seleccione otra opcion \n");
- }
- else if(seleccion == 3){
- printf("se detendra el sistema completo\n");
- for(i = 0; i < 5; i++){
- n[i] = 0;
- }
- pthread_exit(0);
- }
- else if(seleccion == 4){
- printf("salir \n");
- exit(0);
- }
- else{
- printf("no selecciono ninguna opcion disponible\n");
- printf("Volvio al menu, seleccione otra opcion\n");
- }
- }
- while (1){
- int resultado;
- int pidc;
- resultado = read(pipa[0],&pidc,MAGNITUD);
- printf("\nReader: %d \n",resultado);
- for(i = 0; i < 5;i++){
- if(n[i] == 0){
- n[i] = resultado;
- printf("i = %d n[i]0 = %d \n",i,n[i]);
- break;
- }
- }
- if (resultado != 1){
- perror("read");
- exit(3);
- }
- }
- return NULL;
- }
- void *clientes()
- {
- int resultado;
- int *pidc = getpid();
- while(1){
- resultado = write(pipa[1],&pidc,MAGNITUD);
- printf("\nWriter: %d \n",pidc);
- if(resultado != 1){
- perror("write");
- exit(2);
- }
- }
- return NULL;
- }
- int main(int argc, char *argv[])
- {
- pthread_t pp1,pp2;
- int resultado;
- printf("Creo Thread 1 para el servidor \n");
- pthread_create(&pp1,NULL,servidor,NULL);
- pid_t p1 = fork();
- pid_t p2 = fork();
- pthread_join(pp1,NULL);
- if(p1 > 0 && p2 >0){
- pthread_create(&pp2,NULL,clientes,NULL);
- printf("Creo Thread 2 para cliente y mi pid es: %d \n",getpid());
- pthread_join(pp2,NULL);
- }
- else if(p1 == 0 && p2 > 0){
- wait(0);
- pthread_create(&pp2,NULL,clientes,NULL);
- printf("Creo Thread 3 para cliente y mi pid es: %d \n",getpid());
- pthread_join(pp2,NULL);
- }
- else if(p1>0 && p2==0){
- wait(0);
- pthread_create(&pp2,NULL,clientes,NULL);
- printf("Creo Thread 4 para cliente y mi pid es: %d \n",getpid());
- pthread_join(pp2,NULL);
- }
- else {
- wait(0);
- pthread_create(&pp2,NULL,clientes,NULL);
- printf("Creo Thread 5 para cliente y mi pid es: %d \n",getpid());
- pthread_join(pp2,NULL);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement