Como te mencionaba en el mensaje anterior, cuando uno comienza a programar, hay que ser un poco paciente e ir poco a poco, ya que veo que estas haciendo todo el prog y a veces es dificil que salga a la primera, te recomiendo que primero pruebes la lectura del nombre del archivo que introduce el usuario.
Esto te lo menciono porque esxite una "contradiccion" en tu codigo para este punto. Dejare momentaneamente lo de las señales a un lado. Voy por partes y espero explicarme bien.
Enfocandose en la lectura del nombre del archivo por parte del usuario:
Código:
main(int argc, char *argv[])
argv almacena los parametros que se mandan al ejecutar un prog y argc nos indica el numero de parámetros que se emplearon. Si el usuario tiene que enviar el nombre del archivo desde que lo ejecuta se emplearán los valores en argv, por ejemplo
Miprog Archivo.txt
Con esto desde que ejecuto el prog ya estoy recibiendo el nombre del archivo, pero si lo que quiero es que primero se ejecute el prog y despues que me solicite el nombre del archivo a buscar, lo haremos con read y write, creo que este es el caso que necesitas. Considerando esto:
Código:
stat ("fichero.txt", &buf);
Esta linea la tienes en la parte donde defines las variables, no es incorrecto pero es una buena practica de programacion primero definir las variables y despues ya todo el código de ejecución. Habría que moverla de lugar
Código:
for (i=1; i < argc ; i++)
Este for creo que lo obtuviste de otro código de ejemplo, generalmente se emplea para rcorrer cada uno de los parámetros que se envia al invocar el prog pero en tu caso el valor que requieres lo obtendras en la ejecución, no en la llamada, por lo que habría que eliminarlo
Código:
sprintf ("Nombre del archivo: ");
Como te menciono sprintf sirve para mandar a un stream la cadena y o a la pantalla, ya que solo puedes usar read y write cambiala por
Código:
write(1,"Nombre Archivo:\n",strlen(Nombre Archivo:\n));
read(0,filen,sizeof(filen));
Por otro lado
Código:
if( (filen = open( argv[1], O_RDWR )) == -1 )
La variable filen la declaras como un array de char para almacenar el nombre que de el usuario del archivo a buscar, la función open regresa un apuntador a un archivo, por lo cual requieres definir una variable FILE *ptrfile; y el valor filen iria en el lugar de argv[1] ya que como te decia, este parametro lo recbirias si desde la invocacion del prog le mandas el valor del archivo.
Realmente te aconsejaria que fueras paso a paso, existen varios errores de sintaxis en el prog que posteaste, por que no empiezas paso a paso, primero haz el prog que lea el nombre del archivo. No elimines este codigo ya que vas a emplear varias partes.