[ anatogen @ 27.01.2002. 18:44 ] @
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!
[ Vojislav Milunovic @ 27.01.2002. 22:25 ] @
A kako bi bilo da posaljes signal ?
[ anatogen @ 27.01.2002. 23:21 ] @
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 ?!
[ anatogen @ 28.01.2002. 01:27 ] @
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 !