elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como crear multiples procesos en C y tuberias pipe()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como crear multiples procesos en C y tuberias pipe()  (Leído 1,861 veces)
yeah_2796

Desconectado Desconectado

Mensajes: 6


Ver Perfil
como crear multiples procesos en C y tuberias pipe()
« en: 19 Diciembre 2018, 16:05 pm »

hola verán tengo mi codigo que cuenta la cantidad de archivos que hay en un directorio y después devuelve el nombre de ese archivo junto a su md5sum , lo que sucede es que mi tarea dice lo siguiente:

La aplicacion debe examinar una vez cada cierto tiempo el contenido del directorio “/var/log”, para identificar los cambios que hayan ocurrido en los archivos de log del sistema desde la u´ltima revisi´on. Se deben omitir los subdirectorios y los archivos con extension “.gz”. Para verificar los archivos debe utilizar el comando de shell “md5sum” mediante las llamadas al sistema fork y exec. Por cada archivo a ser procesado su aplicaci´on debe crear un subproceso el cual se encargar de ejecutar el comando “md5sum”. El resultado del comando debe ser retornado

entonces encontre un codigo aqui en stackoverflow sobre como crear multiples procesos hijos: https://stackoverflow.com/questions/876605/multiple-child-process , lo cual supongo que es como lo piden en mi enunciado ya que dice "por cada archivo a prcesar se crea un subproceso" pero queria saber si es la manera correcta.

lo segundo es con las tuberias, yo tengo mi funcion piepe() y mi arreglo inf[2] y usando la funcion dup. redirigo la salida y entrada, pero tengo duda si tengo que crear una especie de arreglo dianmico o un arreglo de arreglo , ya que se deben crear N tuberias de acuerdo a mis N archivos leidos

Código
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/wait.h>
  8. #include<dirent.h>
  9.  
  10. char buffer[100];
  11.  
  12. int s;
  13.  
  14.  
  15.  
  16. int path_is_dir(char *path) {   //valido si son subdirectorios
  17.    struct stat st_info;
  18.  
  19.    if (stat(path, &st_info) < 0) {
  20.        return 0;
  21.    }
  22.  
  23.    return S_ISDIR(st_info.st_mode);
  24. }
  25.  
  26.  
  27. void validar_folder(){
  28.  
  29. int carp;
  30.  
  31. DIR *dirp_p;
  32. struct dirent *entry;
  33. dirp_p = opendir("/home/jose/Escritorio/carpetaPrueba") ; //va "/var/log/PROYECTO_SO_1"
  34.  
  35.    if(dirp_p == NULL ){
  36.        carp= mkdir("carpetaPrueba",0777);          //creo la carpeta
  37.    }
  38.  
  39. }
  40.  
  41.  
  42. int main(){
  43.  
  44. int cont_file=0;
  45. int inf[2];
  46.  
  47. validar_folder();
  48.  
  49. pipe(inf);
  50.  
  51. DIR *dirp;
  52. struct dirent * entry;
  53. dirp = opendir("/home/jose/Escritorio");
  54.  
  55. while ((entry = readdir(dirp) )!=NULL) { //cuanto la cant de archivos
  56.     if (entry->d_type == DT_REG) {
  57.       cont_file++;
  58.    }
  59. }
  60. closedir(dirp);
  61.  
  62.  
  63. const char * dir_name = "/home/jose/Escritorio";            
  64. DIR * dir_ptr = NULL;
  65. struct dirent * dirent_ptr;        
  66.  
  67. dir_ptr = opendir( dir_name );
  68.  
  69. //int f = open("prueba.txt", O_CREAT | O_WRONLY, S_IRWXU | S_IRWXG | S_IRWXO);
  70.  
  71. while ( (dirent_ptr = readdir( dir_ptr ) ) != NULL ){
  72.  
  73. if(!path_is_dir(dirent_ptr -> d_name)){
  74.  
  75. if(fork()==0){
  76.  
  77. close(1);
  78.  
  79. dup(inf[1]); // redirige la salida estandar
  80.  
  81. execl("/usr/bin/md5sum", "md5sum", dirent_ptr -> d_name, NULL);
  82.  
  83. }else{
  84.  
  85. read(inf[0], buffer, 100);
  86.  
  87. buffer[32] = '\0';
  88. printf("%s :", dirent_ptr -> d_name);
  89. printf("%s\n", buffer);
  90.  
  91.  
  92. wait(&s);


« Última modificación: 20 Diciembre 2018, 02:42 am por yeah_2796 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Ejecutar multiples procesos
Scripting
EagleOneRaptor 5 7,553 Último mensaje 9 Mayo 2009, 07:08 am
por leogtz
¿Cómo crear procesos hijos en C para Windows?
Programación C/C++
Yoel Alejandro 3 6,204 Último mensaje 23 Marzo 2014, 01:30 am
por amchacon
Cómo crear un pendrive maestro con múltiples instaladores de S.O
Noticias
wolfbcn 2 2,779 Último mensaje 22 Agosto 2016, 15:04 pm
por AsimoJMSR
Cómo crear un pendrive maestro con múltiples instaladores de S.O
Noticias
wolfbcn 0 2,140 Último mensaje 24 Enero 2017, 14:20 pm
por wolfbcn
Ayuda: IP aliasing como crear múltiples IP desde un PC
Redes
Eidens 3 2,915 Último mensaje 29 Abril 2017, 22:41 pm
por Ancasu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines