Beruflich Dokumente
Kultur Dokumente
Integrantes: Morales Vzquez Mariano Prez lvarez Juan Carlos Profesor: Corts Galicia Jorge
Grupo: 2CM8
Syntax
BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, __inout_opt LPTSTR lpCommandLine, __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in_opt LPVOID lpEnvironment, __in_opt LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation );
Desarrollo 1. Inicie sesin en Windows 2. Para esta prctica se utilizara el ambiente de programacin Dev C/C++ 3. Capture y compile el programa de creacin de un nuevo proceso que a continuacin se muestra:
#include <stdio.h> #include <windows.h> int main(int argc,char *argv[]){ STARTUPINFO si; PROCESS_INFORMATION pi; int i; ZeroMemory(&si,sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi,sizeof(pi)); if ( argc != 2 ){ printf("Usar: %s\n",argv[0]); return 1; }
2CM8
Pgina 2
4. Capture y compile el programa que contendr al proceso hijo que a continuacin se muestra:
#include <windows.h> #include <stdio.h> int main(){ printf("Soy el hijo\n"); exit(0); }
5. Ejecute el primer cdigo pasando como argumento el nombre del archivo ejecutable del segundo cdigo capturado. Observe el funcionamiento del programa, reporte sus observaciones y experimente con el cdigo.
2CM8
Pgina 3
A diferencia de sistemas operativos Linux, en Windows es un poco ms complicada la tarea de crear un nuevo proceso, debido a la manera en la que hay que llamar al programa. De manera similar a Linux, existe la funcin WaitForSingleObject() que espera a que los nodos hijo terminen su tarea.
7. Programe una aplicacin que cree un proceso hijo a partir de un proceso padre, el hijo creado a su vez creara tres hijos ms. A su vez cada uno de los tres procesos creara dos procesos ms. Cada uno de los procesos imprimir en pantalla su identificador.
/* Proceso padre */ #include <stdio.h> #include <windows.h> int main(int argc,char *argv[]){ STARTUPINFO si; PROCESS_INFORMATION pi; int i; ZeroMemory(&si,sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi,sizeof(pi)); if ( !CreateProcess(NULL, "hijo" ,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) ){ printf("Fallo al invocar CreateProcess(%d)\n",GetLastError() ); return 1; } printf("1. Mi PID es %d\n", GetCurrentProcessId()); WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; } /* Crea tres procesos ms */ #include <windows.h> #include <stdio.h> int main(){ STARTUPINFO si; PROCESS_INFORMATION pi; int i; int j;
2CM8
Pgina 4
2CM8
Pgina 5
2CM8
Pgina 6
9. Programe una aplicacin que cree un proceso hijo a partir de un proceso padre, el hijo creado a su vez creara tres hilos (hilos padre). Cada uno de los tres hilos padre creara dos hilos ms (hilos hijo). Cada uno de los hilos hijo imprimir en pantalla el mensaje que sea enviado por su hilo padre correspondiente, cada uno de los hilos padre enviara mensaje diferente a sus hilos hijos. 10. Programe una aplicacin que cree tres hilos. El primer hilo se encargar de contabilizar las ocurrencias de una cadena dentro de un archivo especifico y devolver el resultado al programa principal; el segundo hilo copiara los archivos de su directorio actual a un subdirectorio que usted elija devolviendo al programa principal el nmero de archivos copiados; el tercer hilo generara un archivo donde se reportaran los resultados devueltos por los otros dos hilos. Cdigo fuente:
#include <stdio.h> #include <string.h> #include <windows.h> DWORD WINAPI buscaPalabras(LPVOID lpParam); DWORD WINAPI copiaFicheros(LPVOID lpParam); DWORD WINAPI escribeReporte(LPVOID lpParam); typedef struct ParamBusqueda busqueda; typedef struct ParamSubdir subdir; typedef struct ParamMakefile make; struct ParamBusqueda{ char fileName[100]; char search[100]; int ocurrencias; }; struct ParamSubdir{ char folderNameOr[100]; char folderNameDest[100]; int files; }; struct ParamMakefile{ int ocurrencias; int files; };
2CM8
Pgina 7
2CM8
Pgina 8
Antes de ejecutarlo:
2CM8
Pgina 9
Despus de ejecutarlo:
Anlisis Crtico La creacin de procesos en entornos Windows es un poco ms engorrosa que en Linux, pero nos ofrece una plataforma que parece ser bastante estable para la elaboracin de aplicaciones que necesiten la creacin de procesos e hilos.
2CM8
Pgina 10
Windows Dev Center Desktop. Processes and Threads. [En lnea] Disponible en
2CM8
Pgina 11