Jump to content
Carlos7

Ctrl + C na linha de comandos

Recommended Posts

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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other sites
Carlos7

Continuo sem conseguir fazer o pretendido...

Como é que eu consigo enviar um sinal para fazer escrita para um ficheiro?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Edited by Carlos7

Share this post


Link to post
Share on other sites
HappyHippyHippo

não te aparece uma mensagem quando carrecas no Ctrl+C ???

se sim continua a carregar ...


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

Share this post


Link to post
Share on other 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

Edited by Carlos7

Share this post


Link to post
Share on other 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í.)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.