因此,当文件上发生IO时,我正在使用fcntl来发信号通知我的进程。它正在使用普通管道,但是当我切换到fifos或普通文本文件时,它无法正常工作。这是代码:
void sighandler(int a){
cout<<"Here \n";
}
int main(){
unlink("temp.fifo");
if(mkfifo("temp.fifo", IPC_CREAT|0666)<0){perror("Error\n");}
int fd = open("file.txt", O_RDONLY);//open("temp.fifo", O_RDWR | O_ASYNC | O_NONBLOCK);
int fdi[2];
pipe(fdi);
signal(SIGIO, sighandler);
fcntl(fd, F_SETOWN, getpid());
fcntl(fd, F_SETSIG, SIGIO);
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags | O_ASYNC | O_NONBLOCK);
//while(1){write(fd, "stuff", 6);}
while(1){}
}