-- Francisco Moya Fernandez Computer Architecture and Networks Group Assistant Professor [EMAIL PROTECTED] School of Computer Science Fax:(+34 926) 29 53 54 University of Castilla-La Mancha Tel:(+34 926) 29 54 83 http://www.inf-cr.uclm.es/
-----Mensaje original----- De: FRANCISCO MOYA FERNANDEZ Enviado el: sáb 12/01/2008 17:18 Para: Manuel David Jiménez Patiño CC: [EMAIL PROTECTED] Asunto: RE: [CRySoL] C en tiempo real Manuel, yo sigo diciendote lo mismo, un vector no es lo mismo que un array. Esto: char *argumento_recibido_de_la_unidad_de_control =""; no te dejó vivir en paz, te acabó de destrozar el programa. Ahora esa variable es un puntero que apunta a un array de un solo elemento, que obviamente no tiene suficiente para ningún archivo. Además si compilas con warnings activados habrás visto que un "" es un const char[] no un char[]. Salud, Paco -- Francisco Moya Fernandez Computer Architecture and Networks Group Assistant Professor [EMAIL PROTECTED] School of Computer Science Fax:(+34 926) 29 53 54 University of Castilla-La Mancha Tel:(+34 926) 29 54 83 http://www.inf-cr.uclm.es/ -----Mensaje original----- De: [EMAIL PROTECTED] en nombre de Manuel David Jiménez Patiño Enviado el: sáb 12/01/2008 15:51 Para: [email protected] Asunto: Re: [CRySoL] C en tiempo real Hola querido Paco, ayer cuando escribí el e-mail me pasé todo el día intentando solucionar el dichoso problema, por lo que mi duda salió escrita como salió. Nada más enviar el e-mail me di cuenta que me había equivocado al escribir: strcpy(argumento_recibido_de_la_unidad_de_control, argv[0]); Lógicamente tengo: strcpy(argumento_recibido_de_la_unidad_de_control, argv[1]); Como tú bien dices argv[0] es el nombre del ejecutable. El compilador me daba fallo en esta línea: strcpy(argumento_recibido_de_la_unidad_de_control, argv[1]); Porque me decía que *argumento_recibido_de_la_unidad_de_control *no estaba inicializado, por lo que al hacer simplemente: char *argumento_recibido_de_la_unidad_de_control =""; me dejó vivir en paz. Por lo demás, sea guarro o asqueroso -- (debería seguir años picando código, leyendo código y manuales para poder decir que programo (sms subliminal para los que dicen que programar lo hace cualquiera)) --no entiendo por qué no me funciona, debería funcionarme tal y como lo hace cuando lo ejecuto por línea de comandos. Pero en fin, seguiré intentándolo. Saludos y gracias Paco por contestar. ************************************************************************** "Levántate ponte en pie y defiende tus derechos, levánte ponte en pie y no abandones la lucha" Bob Marley. 2008/1/12 FRANCISCO MOYA FERNANDEZ <[EMAIL PROTECTED]>: > Hombre, antes de nada decirte que me parece un poco guarro. No se por qué > tienes que meterlo todo en un argumento cuando puedes pasar (de forma mucho > más simple) varios. > > Por otro lado al execv le pasas solo el argv[0] que ni siquiera es un > argumento del programa, sino el nombre del propio programa. > > Pero la parte más grave está en > > char *argumento_recibido_de_la_unidad_de_control; > strcpy(argumento_recibido_de_la_unidad_de_control, argv[0]); > > ¡No es lo mismo un puntero que un array! Estás copiando el argv[0] en > cualquier parte porque el puntero no está inicializado. Lo que pase a partir > de esa línea puede ser cualquier cosa. > > En cuanto a ejecutarlo en línea de comandos no me creo que funcione. Por > una razón muy sencilla, al ejecutarlo en línea de comandos el argv[0] es, > como debe ser, el ejecutable. Por tanto tú crees que funciona, pero no lo > hace porque realmente está diciendo que el ejecutable existe (cosa que ya > sabiamos). > > Saludos, > Paco > > -- > Francisco Moya Fernandez Computer Architecture and Networks Group > Assistant Professor > [EMAIL PROTECTED] School of Computer Science > Fax:(+34 926) 29 53 54 University of Castilla-La Mancha > Tel:(+34 926) 29 54 83 http://www.inf-cr.uclm.es/ > > > > -----Mensaje original----- > De: [EMAIL PROTECTED] en nombre de Manuel David Jiménez > Patiño > Enviado el: vie 11/01/2008 22:44 > Para: [email protected] > Asunto: [CRySoL] C en tiempo real > > Hola muchachos y muchachas os comento la última penuria: > > estoy utilizando: > > execv(nombre_del_ejecutable,línea de ordenes); > > por ejemplo hago: > > char *argv[] = > > {"ruta_de_un_archivo_uno#ruta_de_un_archivo_dos#ruta_de_un_archivos_tres"}; > // estas rutas las obtengo del proceso padre en tiempo real.( no lo hago > > exactamente como lo hemo mostrado antes, > > concretamente utilizo varias veces strcat, pero vamos para exponer mi duda > > > puede valer) > > a = execv(etapa_dos,argv); > > > > > Luego en el proceso etapa_dos: > > recojo argv. > > char *argumento_recibido_de_la_unidad_de_control; > > strcpy(argumento_recibido_de_la_unidad_de_control, argv[0]); > > > y con la función strtok saco los tokens (rutas de los archivos) > delimitados > por el caracter #. > > es decir, que consigo sacar a partir de a* > rgumento_recibido_de_la_unidad_de_control* por separado: > > ruta_de_un_archivo_uno > > ruta_de_un_archivo_dos > > ruta_de_un_archivo_tres > > > Pero en este proceso comprueba la existencia de los mismos y me dice que > no > existen(cuando yo mismo los estoy viendo que si que existen). > > El fallo anterior es problandolo en tiempo real e incluso haciendo que > antes > de llamar al proceso hijo se esperen 85 segundos(para que de tiempo más > que > suficiente a que se creen los archivos). > > En cambio ejecuto el programa desde línea de comandos metiendole rutas de > archivos ya existentes y el programa no falla. > > > No sé si me he explicado bien. > > Pero vamos, ¿A alguno de ustedes le ha pasado esto alguna vez? > > Saludos no cordiales. > > > ******************************************************************************************** > "El viento viene y el viento se va, por la frontera, la suerte viene y la > suerte se va, por la frontera" , Manu Chao > >
_______________________________________________ CRySoL mailing list http://crysol.inf-cr.uclm.es/ https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol
