event
2 отговора
81 прегледа
event
Здравейте. Искам да следя във фонов режим някакво събитие, примерно създаване на файл или някаква промяна в него. За целна написах следната програма:
static void sigalarm(int signo)
{
char *cp,buf[2];
int fin;
struct timeval tv;
gettimeofday(&tv, NULL);
if (start.tv_sec==0) start = tv;
fin = open("test",O_RDWR);
read(fin,buf,1);
close(fin);
if(buf[0]=='1'){
fin = open("test",O_RDWR);
write(fin,"0",1);
close(fin);
}
alarm(1);
}
static inline void set_signal(int signo, void (*handler)(int))
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = (void (*)(int))handler;
sigaction(signo, &sa, NULL);
}
main()
{
set_signal(SIGALRM, sigalarm);
sigalarm(0);
for(;;){
}
}
Ама явно не е това подхода, щото top-a, обажда 90% заетост на CPU:) Та питането ми е за някакав по-елегантен начин.
static void sigalarm(int signo)
{
char *cp,buf[2];
int fin;
struct timeval tv;
gettimeofday(&tv, NULL);
if (start.tv_sec==0) start = tv;
fin = open("test",O_RDWR);
read(fin,buf,1);
close(fin);
if(buf[0]=='1'){
fin = open("test",O_RDWR);
write(fin,"0",1);
close(fin);
}
alarm(1);
}
static inline void set_signal(int signo, void (*handler)(int))
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = (void (*)(int))handler;
sigaction(signo, &sa, NULL);
}
main()
{
set_signal(SIGALRM, sigalarm);
sigalarm(0);
for(;;){
}
}
Ама явно не е това подхода, щото top-a, обажда 90% заетост на CPU:) Та питането ми е за някакав по-елегантен начин.
Re: event
Мерси. Предполагам , че има по-елегантен начин, и самата система си го може:) Май ще трябва да почетем, още малко...