Я использую select()
для получения данных от стандартного ввода.
Код здесь:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
int main()
{
fd_set rfds;
struct timeval tv;
int retval;
char buf[100];
FD_ZERO(&rfds);
FD_SET(STDIN_FILENO, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1,&rfds,0,0,&tv);
if( retval == -1)
perror("select reset\n");
else if(retval == 0)
printf("timeout\n");
else
{
printf("data available\n");
if(FD_ISSET(STDIN_FILENO, &rfds))
{
//int ret = recv(STDIN_FILENO, buf, sizeof(buf), 0); // ret get -1.
int ret = read(STDIN_FILENO, buf, sizeof(buf)); // ret get correct data.
printf("buf: %s ret: %d\n", buf,ret);
}
}
return 0;
}
В этом коде recv()
всегда будет возвращать -1
, но read()
может получить правильные данные.
Я считаю, что read()
эквивалентно recv()
с параметром flags
, равным 0
.Почему тогда поведение recv()
и read()
не совпадает в моем коде?