8

名前のないパイプの端で特定のイベントを監視する必要があるプログラムを作成しようとしています。ポーリング機能で無名パイプを使用できますか?

はいの場合、機能記述子を使用したポーリング関数の構文を教えてください

4

2 に答える 2

6

アンケートの例

読み取り可能か書き込み可能かpollを確認するために使用するには:readfdwritefd

int readfd;
int writefd;

// initialize readfd & writefd, ...
// e.g. with: open(2), socket(2), pipe(2), dup(2) syscalls

struct pollfd fdtab[2];

memset (fdtab, 0, sizeof(fdtab)); // not necessary, but I am paranoid

// first slot for readfd polled for input
fdtab[0].fd = readfd;
fdtab[0].events = POLLIN;
fdtab[0].revents = 0;

// second slot with writefd polled for output
fdtab[1].fd = writefd;
fdtab[1].events = POLLOUT;
fdtab[1].revents = 0;

// do the poll(2) syscall with a 100 millisecond timeout
int retpoll = poll(fdtab, 2, 100);

if (retpoll > 0) {
   if (fdtab[0].revents & POLLIN) {
      /* read from readfd, 
         since you can read from it without being blocked */
   }
   if (fdtab[1].revents & POLLOUT) {
      /* write to writefd,
         since you can write to it without being blocked */
   }
}
else if (retpoll == 0) {
   /* the poll has timed out, nothing can be read or written */
}
else {
   /* the poll failed */
   perror("poll failed");
}
于 2012-04-04T10:21:23.040 に答える
2

poll(2)インターフェイスを使用するのに名前は必要ありません。struct pollfd他のソケットと同様に、システムコールに渡すファイル記述子を配列に含めるだけです。

于 2012-04-04T09:29:06.090 に答える