Está en la página 1de 2

int istxt(char * name) { } void writetopipe (int flout, char * dir, char * name) { necesito una funcin para

concatenar el did con el nombre del fichero para obtener el path Es necesario para poder obtener el fd con open. (OREAD) El fdout est ya abierto en modo OWRITE. (Esto ya est implementado, pero solo vlido para el directorio actual). }

int pipeto(char * cmd) { int fd[2]; pipe(fd); switch (fork()){ case -1: return -1; case 0: close(fd[1]); dup (fd[0],0); close (fd[0]); execl(/bin/rc, rc, -c, cmd, nil); sysfatal (execl); default: close(fd[0]); return fd[1]; } }

run () { int fd; Primero hay que comprobar si el directorio es correcto. Pero eso se puede hacer en el main directamente y si es correcto se pasa el descripto de fichero o las entradas directamente a esta funcin. Seria correcto comprobarlo aqu porque lo indicado es solo pasar un path a esta funcin. A partir de ese path llamar a getdentries y obtener el vector. Quizas se puede hacer directamente. Supongo que si el directorio es incorrecto o esta vaco no tiene sentido crear procesos ni pipes. fd = pipeto (sha1sum); if (fd < 0){

sysfatal (pipeto: %r); /*una vez que he creado el pipe correctamente, entonces leo el directorio en busca de txt*/ for (i = 0, i< ndentries, i++){ if (istxt(dentries[i]).name)){ writeinpipe (fd,dentries[i].name); } } wait(); /*en este caso no es necesario que espere*/ close (fd); /*ahora es cuando el hijo al haberse cerrado la entrada de la tubera ejecuta el comando habiendo ledo la entrada del descriptor de fichero 0, desdecir su entrada estndar.*/ } Es necesario un procedimiento que escriba en el pile. Para ello, hay que leer del fichero y conforme se lee se escribe por el descripto de fichero dado que ser la entrada del pipe. El comando que ejecuta el hijo realiza un resumen del contenido que se le pasa, en este caso la concatenacin del contendi de los ficheros.txt dentro del directorio.

También podría gustarte