select bug?

Mikulas Patocka mikulas na artax.karlin.mff.cuni.cz
Sobota Září 25 18:06:19 CEST 1999


Zdravim.

Chovani funkce select na pipy v linuxu mi prijde podivne.
Kdyz do pipy neco zapisu a pak ji otestuju selectem pro
zapis, tak nebude vybrana (ackoli by mela byt vybrana,
pokud neni zcela zaplnena). Prikladam programek, ktery to
demonstruje - na Linuxu vrati nulu a na ostatnich systemech
(zkousel jsem BSD, OS/2, Solaris) vrati 1 - pipa je radne
vybrana.
Neni to bug? (na druhou stranu mi pripada divne, ze si
toho nikdo nevsiml - je to tak i ve verzi 2.0)

Mikulas Patocka

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>

int can_write(int fd)
{
	fd_set fds;
	struct timeval tv = {0, 0};
	FD_ZERO(&fds);
	FD_SET(fd, &fds);
	return select(fd + 1, NULL, &fds, NULL, &tv);
}

int main()
{
	int p[2];
	pipe(p);
	write(p[1], "x", 1);
	printf("%d\n", can_write(p[1]));
	return 0;
}


Další informace o konferenci Linux