Neo4
Banido
Boas,
estou a fazer uns exercicios para a freq de SO de amanha e tenho aqui uma duvida.
o exercicio é este:
Considere um programa filtro que quando invocado com trˆes argumentos: filtro progA progB
ficheiro processa todo o seu standard input em cadeia atrav´es dos programas progA e progB e
guarda o resultado em ficheiro. O programa filtro est´a preparado para receber o sinal SIGABRT;
nessa altura interrompe o processamento escrevendo no ficheiro "INTERROMPIDO", terminando todos
os processos filho e a sua pr´opria execuc¸ ˜ao.
este é o meu codigo:
o meu problema prende-se em como passar o nome do ficheiro que recebe em argv para a funcao sinal para abrir esse e nao o erro.txt que fiz so para testar se tudo trabalhava bem...
obrigado
estou a fazer uns exercicios para a freq de SO de amanha e tenho aqui uma duvida.
o exercicio é este:
Considere um programa filtro que quando invocado com trˆes argumentos: filtro progA progB
ficheiro processa todo o seu standard input em cadeia atrav´es dos programas progA e progB e
guarda o resultado em ficheiro. O programa filtro est´a preparado para receber o sinal SIGABRT;
nessa altura interrompe o processamento escrevendo no ficheiro "INTERROMPIDO", terminando todos
os processos filho e a sua pr´opria execuc¸ ˜ao.
este é o meu codigo:
Código:
#include <stdio.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include<readline/readline.h>
#include<readline/history.h>
#include<fcntl.h>
#include<signal.h>
void sinal(int x){
int fd;
fd = open("erro.txt", O_CREAT | O_WRONLY |O_TRUNC, 0644);
write(fd,"INTERROMPIDO.\n",strlen("INTERROMPIDO.\n"));
printf("erro!\n");
exit(0);
}
main(int argc, char **argv){
int i, p[2], fd, t, fk;
char buff[1000];
signal(SIGABRT, sinal);
for(i=1; i<argc-1; i++){
pipe(p);
fk = fork();
if(!fk){
dup2(p[1], 1);
close(p[1]); close(p[0]);
execvp(argv[i], NULL);
exit(-1);
}
dup2(p[0],0);
close(p[1]);
close(p[0]); //kill(fk, SIGABRT);
}
fd = open(argv[argc-1], O_CREAT | O_WRONLY |O_TRUNC, 0644);
while(t = read(0, buff, 1000)){
write(fd, buff, t);
}
close(fd);
wait(0);
}
o meu problema prende-se em como passar o nome do ficheiro que recebe em argv para a funcao sinal para abrir esse e nao o erro.txt que fiz so para testar se tudo trabalhava bem...
obrigado