【发布时间】:2019-04-08 08:30:12
【问题描述】:
我正在尝试编写一个程序,该程序连接到在另一个终端上使用nc -v -l 1337 打开的服务器,并将标准输入、标准输出、标准错误重定向到套接字。
意思是,另一个终端将写入套接字,我的程序将使用getchar() 读取它并使用printf() 响应。
我遇到了一些奇怪的事情——如果我注释掉 printf 的第一次使用(在 dup2(sockfd,1) 之前),一切正常。如果没有,打印什么也不做。什么会导致这种情况?
int main()
{
int sockfd, connfd;
struct sockaddr_in servaddr, cli;
// socket create and varification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(1337);
connect(sockfd, (SA*)&servaddr, sizeof(servaddr));
dup2(sockfd,0);
//---------------------------
// printf("%s\n","hi" );
//---------------------------
dup2(sockfd,1);
dup2(sockfd,2);
char buff[80];
int n;
while(1){
n = 0;
while ((buff[n++] = getchar()) != '\n');
buff[n-1] = 0;
printf("message %s excepted\n",buff );
}
// close the socket
close(sockfd);
}
【问题讨论】: