Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 6.687 pregleda

Najnovija ↓

read prekinut signalom 27.01.2002. u 19:44 · pre 301 mesec #1
Code:

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

void handler (int sign) {

     printf("Primio sam signal broj %d\n", sign);
     signal(SIGTERM, handler);
}

main () {
        
     int a; char c;
     signal(SIGTERM, handler);
     a=read(0,&c,1);
     if (errno==EINTR) printf("Read je prekinut signalom\n");
}


Zasto ne odstampa "Read je prekinut signalom" kada bi trebalo da posle primljenog signala read izmeni errno? U stvari read ne bi trebalo ni da se zavrsi pa bi bilo if (a<0 && errno==EINTR) ali nesto i nije bas tako... help!
Potpis
vitamini, minerali, suplementi...
Re: read prekinut signalom 28.01.2002. u 00:21 · pre 301 mesec #3
Sta kako bi bilo ?

Znaci, startuje se program i recimo ode se na drugu konzolu saznas njegov pid i das mu jedno kill pid i odstampa se "Primio sam signal broj 15" sto je sve ok ali nastavi se sa read pozivom koji ne izmeni errno a trebao bi i ne izvrsi se drugi printf ?!
Potpis
vitamini, minerali, suplementi...
Re: read prekinut signalom 28.01.2002. u 02:27 · pre 301 mesec #4
A resio sam problem naime po defaultu kod linuxa sys poziv bice obnovljen
ako je primio signal ali se to moze promeniti sys pozivom sigaction
tj menjanjem sa_flags u sigaction strukturi.

Naravno postoji i funkcija int siginterrupt(int sig, int flag); kojom
se cas posla to menja i stavljanjem flag na 1 sys poziv se ne obnavlja vec javlja
gresku (vraca -1) i podesava errno na EINTR !
Potpis
vitamini, minerali, suplementi...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme