Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Carlos7

Ctrl + C na linha de comandos

Mensagens Recomendadas

Carlos7

Boas, tenho um exercício de exame em c que tem que gravar um determinado número escolhido por mim para um ficheiro ao carregar ctrl + c. Mas por defeito, ao carregar ctrl + c num programa a ser corrido na linha de comandos, a execução do programa é encerrada.

Alguém pode dar ideia de como fazer?

O programa tem obrigatoriamente de ser executado em linha de comandos linux.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Eu já dei sinais apesar de não perceber ainda muito bem a matéria, o que tenho de fazer é ao terminar o programa enviar um sinal ao processo pai para que escreva no ficheiro?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

verifica o que este exemplo faz :

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void termination_handler(int signum)
{
static int i = 3;

if (i)
{
	printf("i = %d\n", i);
	i--;
}
else
	exit(0);
}

int main()
{
struct sigaction action;

action.sa_handler = termination_handler;
sigemptyset(&action.sa_mask);
action.sa_flags = 0;

sigaction(SIGINT, &action, NULL);

while (1) /* void */;

return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Sim experimentei e não faz nada (não termina a execução) mas faz o que diz na função em cima descrita.

Editado por Carlos7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Sim ele mostra o printf da função em cima do main, e ao quarto crt+c encerra o programa.

Era isso que eu queria dizer, expliquei-me mal, só ainda não percebi muito bem o funcionamento. Porque nunca usei essas estruturas nas aulas

Editado por Carlos7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Também nunca usei essa estrutura (ainda sou do tempo do signal), mas não foi difícil perceber o seu funcionamento. Aquilo que tu precisas é simples: alterar a função que é executada quando o sinal é enviado. É isso que é feito nas primeiras 5 linhas de código da função main que te foi apresentada. Depois, é estudar minimamente a documentação, para perceberes como podes modificar o código para o teu caso. (Para isso está basta pensar onde é que está definido o comportamento da função que é executada quando carregas no Ctrl+C, e mudar o código aí.)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Sim o exemplo é simples mas como o Rui Carlos referiu, eu também aprendi com o signal ( xxxxx, yyyy). Ou seja como não conheço a estrutura que utilizas-te, não sei o que cada linha faz.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

http://linux.die.net/man/2/signal

The behavior of signal() varies across UNIX versions, and has also varied historically across different versions of Linux. Avoid its use: use sigaction(2) instead. See Portability below.

agora, explicar o que cada coisa faz é irrelevante porque foi tudo iniciado sem informação tirando o parâmetro que guarda o ponteiro para a função a ser executada


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.