Я что-то упустил?
Я хочу выйти из выбора, вызвав запись в другом потоке ... Он никогда не выходит из выбора.
Код тестируется на OSX Snow.
fd_set rio, wio;
int pfd [2];
void test (int sleep_time)
{
sleep (sleep_time);
char buf[] = "1";
write(pfd[1], buf, 1);
}
int main (int argc, char * argv [])
{
char buff[80];
int ended = 0;
pipe(pfd);
FD_ZERO(&rio);
FD_ZERO(&wio);
FD_SET(pfd[1], &wio);
FD_SET(pfd[0], &rio);
pthread_t tid; /* the thread identifier */
pthread_attr_t attr; /* set of thread attributes */
pthread_attr_init(&attr);
pthread_create(tid, NULL, test, 3);
while (!ended)
{
// Check my numbers ... they do not go over 1 ... so 2
if (select(2, &rio, &wio, NULL, 0) < 0)
perror("select");
else
{
if (FD_ISSET(pfd[1], &wio))
{
if ((read(pfd[0], &buff, 80))<0)
perror("read");
ended = 1;
}
}
}