[ 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 !
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.