Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yoel Alejandro en 22 Marzo 2014, 22:55 pm



Título: ¿Cómo crear procesos hijos en C para Windows?
Publicado por: Yoel Alejandro en 22 Marzo 2014, 22:55 pm
Una pregunta a la comunidad. Como sabemos, el estándar POSIX provee un conjunto de métodos para interacción con el sistema operativo (crear o ejecutar procesos, conocer estados y permisos de ficheros, etc). En implementaciones de C para Linux (e UNIX en general) estas funciones están definidas en <unistd.h>. Y sabemos también que Windows es el campeón en desobedecer los estándares.

Mi pregunta es cómo hacer algo similar, por ejemplo crear un proceso hijo con fork(), a través de un programa elaborado en C para el sistema operativo Windows. Y así por ejemplo crear demonios personalizados para tareas de sistema. O también podría ser crear tuberías, comunicar procesos, etc.

La distribucion MinGW para Windows contempla algunas funciones de este tipo, por ejemplo en <dirent.h> está la función de leer directorios readdir(), y en <unistd.h> tenemos chdir() para cambiarnos de directorio. Pero no vi nada de procesos hijos, tuberías, etc.


Título: Re: ¿Cómo crear procesos hijos en C para Windows?
Publicado por: amchacon en 23 Marzo 2014, 00:29 am
Todo eso está definido en las Windows API. De hecho cualquier función que veas relevante del sistema estará definida en las windows API.

El tema de crear procesos en cuestión, buscando en google "createprocess windows api" encontré la página de referencia:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

¿Esperabas una función tan sencilla como la de fork? Amigo mío, Microsoft es un artista en el arte de complicarse la vida, todo lo que veas desarrollado por él suele estar complicado hasta el exceso.

Eso sí, aunque se complica mucho sus herramientas siempre son las mejores en Windows. No vas a encontrar ninguna que haga más que las suyas.

Por cierto, si te da igual usar hilos o procesos. Quizás te interesa C++11, es el estándar del 2011 de C++ y una de sus novedades son las librerías de hilos:
http://en.cppreference.com/w/cpp/thread

De lo mejor que vas a encontrar en programación concurrente y te funcionará tanto en linux como en windows (ya que forma parte de la librería estándar).


Título: Re: ¿Cómo crear procesos hijos en C para Windows?
Publicado por: Yoel Alejandro en 23 Marzo 2014, 00:59 am
Windows API's: ............ Ya lo sabía: Windows es el campeón en desobedecer los estándares.

O como bien dices: Microsoft es un artista en el arte de complicarse la vida, todo lo que veas desarrollado por él suele estar complicado hasta el exceso.

Mejor digo chau al tema y me decido a seguir programando para Linux y otros que respeten POSIX, jajaja.


Título: Re: ¿Cómo crear procesos hijos en C para Windows?
Publicado por: amchacon en 23 Marzo 2014, 01:30 am
Yo no me confiaría tanto del POSIX. Para C son estupendas pero el futuro de C++ va a ser las nuevas clases thread del estandar C++11.

Digo futuro porque son nuevas y aún tienen que madurar un poco. Pero vamos a mí personalmente me parecen de lo mejor que se ha hecho:
Código
  1. void hilo(int a,int b)
  2. {
  3.     cout<<a<<b<<endl;
  4. }
  5. void otro_hilo(double a,float b,float c)
  6. {
  7.   a += b/c;
  8.   cout<<a<<endl;
  9. }
  10.  
  11. int main()
  12. {
  13.     thread t1(hilo,1,2); // llamo a la funcion hilo con los argumentos 1 y 2
  14.     thread t2(otro_hilo,3.2,12.5,6.1); // llamo a la funcion otro_hilo con los argumentos 3.2, 12.5 y 6.1
  15.     t1.join();
  16.     t2.join();
  17. }

A ver como haces eso en POSIX sin tirar de casts y de hacerte estructuras cada 2x3 ^^

Y en el tema de argumentos por referencia o llamadas de metodos de objetos ya ni hablamos xD.