42-Pipex es un proyecto que te enseña sobre la comunicación entre procesos utilizando pipes en sistemas Unix. El proyecto consiste en implementar una versión simplificada del comando de shell | (pipe), que permite encadenar múltiples comandos.
Un pipe es un mecanismo para la comunicación entre procesos que permite pasar datos de un proceso a otro en un flujo unidireccional. En sistemas Unix, el operador pipe (|) se usa para pasar la salida de un comando como entrada a otro.
El objetivo es implementar un programa que imite el comportamiento del comando de shell | dado un teniendo como base un fichero (con permisos de lectura al menos) y indicando un segundo fichero donde va a salir el resultado de la operación.
Aquí están las operaciones que usa el programa:
pipe:Crea un pipe y devuelve descriptores de archivo para lectura y escritura.fork:Crea un nuevo proceso duplicando el proceso actual.dup2:Duplica un descriptor de archivo a un descriptor de archivo especificado.execve:Reemplaza la imagen del proceso actual con una nueva imagen de proceso especificada por un archivo.
Los siguientes comandos deben ser ejecutados en la terminal, dentro del directorio de tu proyecto:
make all: Compila el proyecto y genera el ejecutablepipex.make clean: Elimina los archivos objeto (.o) generados durante la compilación.make fclean: Ejecuta el comandocleany, además, elimina el ejecutablepipex.make re: Ejecuta los comandosfcleanyall, recompilando todo el proyecto desde cero.
Una vez generado el archivo pipex, podrás ejecutarlo pasándole dos comandos como argumentos, teniendo como base un fichero (con permisos de lectura al menos). Algunos posibles ejemplos para su ejecución serían:
./pipex infile.txt "ls -l" "wc -w" out.txt
./pipex infile "grep a" "wc -w" out.txt
./pipex infile.ber "sleep 1" "sleep 2" out.txtActualmente se ha añadido el bonus a este proyecto, que consiste básicamente en admitir más de dos comandos al programa de manera que ya gestiona multiples pipes y usar here doc como input_file
./pipex_bonus here_doc [Delimeter] "cat" "grep pipex" "rev" [output_file]
./pipex_bonus [input_file] "cat" "grep a" "wc -w" [output_file]Ten en cuenta que el programa devolverá Error si se topa con uno de los siguientes casos:
- Si alguno de los comandos no existen:
./pipex infile.txt "error_cmd" "ls -l" out.txt - Si no se mandan como parametros (y su orden cambia) el archivo de entrada, el cmd1, el cmd2 y el archivo de salida:
./pipex "ls -l" "wc -w" out.txt - Hay otros errores como que la ruta absoluta (
$PATH) esta unseteada o trabaja sin el environment:env -i ./pipex infile.ber "sleep 1" "sleep 2" out.txt
Puedes ajustar las opciones de compilación en el Makefile según tus necesidades específicas.