昨日select
、非常に便利なツールである を発見しましたが、機能させることができません。これは私の全コードの一部です:
/* Code here */
FD_ZERO(&fifo_set);
printf("%d\n", num_proc);
for(i = 0; i < num_proc; ++i)
FD_SET(proc[i].fifowfd, &fifo_set);
/* More code here */
while(1)
{
if(select(FD_SETSIZE, &fifo_set, NULL, NULL, NULL) < 0)
{
log_event(5, "Could not block.");
exit(1);
}
printf("FD_SETSIZE: %d\n", FD_SETSIZE);
for(i = 0; i < FD_SETSIZE; ++i)
printf("ISSET %d: %d\n", i, FD_ISSET(i,&fifo_set));
log_event(1, "Actions to be done.");
/* More code */
配列 proc は、その PID と読み取りおよび書き込み FIFO が指定されたプロセスの配列です。FIFO へのファイル記述子がチェックされ、有効です。問題は、fifowfd の値が 5、7、9 の 3 つのプロセス (num_proc) があることです。FD_SETSIZE の値は 1024 です。
@muxが指摘したように、このFIFOは「書き込み用FIFO」のような名前が付けられています。問題は、プロセス側から見た「読み取り/書き込み用の FIFO」を表す「name.r.fifo」と「name.w.fifo」がたくさんあることです。私が示しているコードは、「.w.fifo」を読み取り、「.r.fifo」に書き込むコントローラーからのコードです。
何か不足していますか?