select()
stdinからデータを受信するために使用します。
コードはここにあります:
#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()