Título: Duda minishell Publicado por: RADIACTIVO en 3 Abril 2014, 20:34 pm Hola buenas, estoy programando una minishell para ir probando con esto de c. Estoy programando en debian con gcc 4.4 .
El comando que estoy intentando emular es grep "model name" < <input_file> . El caso es que no consigo hacerlo bien. No tiene mucho misterio, pero creo que me hago un lío con la función dup2(). Creo que no redirecciono bien las salidas, pero por mas que leo en internet no entiendo porque esta mal. Les dejo solo un main() con la función. Antes de meterlo en la minishell, programo los comandos en "módulos" diferentes hasta que funcionan debidamente. Gracias de antemano, cualquier ayuda es bien recibida. Saludos Código: #include <stdio.h> Título: Re: Duda minishell Publicado por: SARGE553413 en 4 Abril 2014, 00:53 am Hola.
Por lo que leo intentas hacer algo como grep "[regexp]" < [fichero_de_texto], pero con grep no hace falta poner el '<', simplemente: grep grep "[regexp]" [fichero_de_texto] Por ejemplo: grep "asdasd" fich1 ==> ok grep "asdasd" < fich1 ==> no ok Además, cuando haces dup2(), esta función devuelve un nuevo descriptor de fichero, y deberías cerrar el antiguo, me explico: Código: int fd=creat(fichName,0644); Si no cierras el otro, creo que tendras el mismo descriptor apuntando a dos sitios a la vez. Por otro lado, al crear el proceso hijo luego haces solo un if() para ver si es el hijo, pero el proceso padre debe esperar a que acabe el hijo. Así: Código: int n=fork(); Saludos. PD. yo he tenido que hacer una práctica de crear un minishell, la tengo y está bastante documentada (el código con explicaciones y tal), si la quieres pídela. Título: Re: Duda minishell Publicado por: RADIACTIVO en 4 Abril 2014, 15:27 pm Muchas gracias SARGE553413, me han venido muy bien tus consejos. ;D
Finalmente he resuetlo mi problema. A pesar de los errores que me has comentado, me he dado cuenta que era lo que no entendia. Solo habia que redirigir la entrada estandar. Código: dup2(fd,0); Siento las molestias y agradezco la ayuda. Saludos Título: Re: Duda minishell Publicado por: xaps en 4 Abril 2014, 18:54 pm No sería mejor recibir los parámetros desde el argv? Es decir, tu puedes crear una declaración de este tipo:
Código Entonces, si tu aplicación es app.exe, cuando hagas desde consola (Linux en este caso) "./a.exe parametro1 parametro2", argc será 3 (argument counter) y argv será {"a.exe", "parametro1", "parametro2"}, de manera que no tendrás que preocuparte por leer los datos. Título: Re: Duda minishell Publicado por: RADIACTIVO en 6 Abril 2014, 10:16 am Si eso ya lo habia probado y efectivamente funciona. Pero es mas divertido hacer esas cosas manualmente, por lo menos para aprender. ;D
Estoy pensando en subir el codigo de la shell cuando acabe a ver que les parece, y asi me podrian dar ideas, consejos y cosas para sguir mejorando. Gracias otra vez! Saludos |