¿Cómo crear procesos hijos en C para Windows?

Iniciado por Yoel Alejandro, 22 Marzo 2014, 22:55 PM

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

Yoel Alejandro

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.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

amchacon

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).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Yoel Alejandro

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.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

amchacon

#3
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 (cpp) [Seleccionar]

void hilo(int a,int b)
{
    cout<<a<<b<<endl;
}
void otro_hilo(double a,float b,float c)
{
  a += b/c;
  cout<<a<<endl;
}

int main()
{
    thread t1(hilo,1,2); // llamo a la funcion hilo con los argumentos 1 y 2
    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
    t1.join();
    t2.join();
}


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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar