Jump to content

Ctrl + C na linha de comandos


Recommended Posts

Posted

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.

Posted

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
Posted (edited)

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

Edited by Carlos7
Posted

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í.)

Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.