Avatar billede danielhep Nybegynder
09. maj 2003 - 12:26 Der er 5 kommentarer og
1 løsning

C program as Deamon... ?

hey

Et lille password krævende program under Linux, men der er jo nogle problemer.  Man kan jo altid bare trykke Alt+c f.eks...ect ect...

Men hvad skal der til for at komme forbi det ?

Mvh

Daniel
Avatar billede thomasledet Nybegynder
12. maj 2003 - 00:50 #1
øh... alt-c? jeg er ikke helt med på, hvad det er, du vil... og mener du ikke ctrl-c

hvis du vil undgå at folk skal kunne kill, trykke ctrl-c og lignende, skal du lave en signal-handler. jeg har ingen idé om, hvordan det gøre i c, men i perl er det forholdsvist enkelt. Fang sigint og ignorer den.
Avatar billede tkandersen Nybegynder
13. maj 2003 - 14:12 #2
Hejsa

Prøv at arbejde lidt med nedenstående:

int sig_int_flag;

main()
{
  int sig_int();  // 'signal interrupt', funktion til at håndtere sigint

  signal(SIGINT, sig_int); // sæt "handler" på typen SIGINT (ctrl+c)

  while (sig_int_flag == 0)  // dummy for at holde det kørende
    pause();
}

sig_int()
{
  signal(SIGINT, sig_int);  // igen - vigtigt! se beskrivelse nedenfor
  sig_int_flag = 1;
}

Det er blot et eksempel på håndtering af signals.

sig_int er funktionen der kaldes når programmet modtager et "ctrl+c" interrupt.

Det første i sig_int er at sætte handleren igen - fordi når et signal er håndteret så er signal(xx, xx) "overstået" og hvis du skal håndtere flere skal du sætte den igen.

Du skal huske at inkludere signal.h.


Håber det er ok.
Avatar billede danielhep Nybegynder
18. maj 2003 - 10:27 #3
tkandersen >>

Jeg kigger på det :)

På mandag kan jeg lige skrive om jeg har fået det til at virke :)

Mvh

Daniel
Avatar billede danielhep Nybegynder
20. maj 2003 - 09:33 #4
Er der ikke nogle som kan hjælpe med ate få det til at virke, fordi jeg kan ikke få tkandersen eksempel til at virke.


Mvh

Daniel
Avatar billede tkandersen Nybegynder
21. maj 2003 - 14:28 #5
Ok - prøv dette modificerede eksempel.

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

int sig_int_flag;


static void sig_int(int signo)
{
  printf("Du har trykket ctrl+c\n");
  signal(SIGINT, sig_int);  // igen - vigtigt! se beskrivelse nedenfor
  sig_int_flag = 1;
}

int main()
{
  signal(SIGINT, sig_int); // sæt "handler" på typen SIGINT (ctrl+c)

  while (1)  // dummy for at holde det kørende
    pause();
}

Du kan ikke dræbe det med CTRL + C.
Ctrl + c fanges med at sætte Signal() funktionen til at overvåge SIGINT (signal interrupt).
Når ét signal er opfanget duer den initierende Signal() ikke mere og skal sættes op på ny. Dette gøres ved at kalde kommandoen igen - som den gør i sig_int().

Dette eksempel har jeg testet så det bør du kunne køre direkte.
Avatar billede danielhep Nybegynder
22. maj 2003 - 19:41 #6
tkandersen >> Tak for hjælpen, det ser ud til at virke fint :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester