getline()函数行为奇怪

getline()函数行为奇怪,第1张

概述getline()函数行为奇怪

我正在尝试通过编写套接字侦听器程序来模拟telnetfunction,并将应用程序通过套接字redirect到侦听器。

在服务器端,我在本地ip(一个定义的端口)上打开一个套接字,然后像这样开始监听

sockfd = socket(AF_INET,SOCK_STREAM,0); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr); Listen(sockfd,5); neewsockfd = accept(sockfd,(struct sockaddr*)&cli_addr,&clIEn);

然后,我开始像这样在一个单独的线程中读取传入的数据:

while(1) { bzero(buffer,256); n= read(newsockfd,buffer,255); if(n>0) printf("%s",buffer); }

在听音码后的主例程中,我join了这样的套接字数据发送部分。

recvfrom失败,错误11

windows对每台机器同时打开的套接字/连接数量的限制

使用非pipe理员帐户的windows pgm套接字访问错误

ZeroMQ:每个数据types的套接字还是只有一个套接字?

Socket编程C / C ++ – recv函数在服务器中挂起

while(1) { bzero(buffer,256); getline(&buffer,&t,stdin); n=send(newsockfd,strlen(buffer),MSG_EOR); }

而对于客户端部分,我已经连接到这样的服务器。

sockfd = socket(AF_INET,0); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; inet_pton(AfF_INET,hostip,&serv_addr.sin_addr.s_addr) serv_addr.sin_port = htons(portno); connect(sockfd,serv_addr,sizeof(serv_addr));

然后我欺骗stdin,stdout和stderr sockfd描述符redirect控制台,如下所示。

dup2(sockfd,STDIN_fileNO); dup2(sockfd,STDOUT_fileNO); dup2(sockfd,STDERR_fileNO); close(sockfd);

最后我在客户端有这样的东西来testing控制台redirect

while(1) { bzero(mystring,256); i = getline(&string,stdin); printf("input:%s-%dn",mystring,i); }

在上面的代码中,我希望getline被阻塞,直到我在服务器应用程序控制台上input一些字符,但是对于我的痛苦,它反复出现值0。

任何想法为什么这种行为?

linux C:获取默认接口的IP地址

TCP套接字超时configuration

在linux上的Socket性能

连接到本地虚拟机

套接字编程gfortran

用stdio(3)混合插座stdio(3)是一个坏主意TM 。 stdin和stdout都是行缓冲的 ,请参阅setbuf(3) ,这可能是什么让你在这里。 还有一个线程安全问题 – stdio流被锁定,但是由于您已经使用GNU扩展,您可以尝试解锁对应的对象。

编辑0:

根据您在意见中的意见,我认为这将是解决方案:

在fork(2)之前在父进程中创建一个pipe(2) fork(2)

在fork(2)但在execve(2)之前, dup2(2)管道的读文件描述符被转换成STDIN ,

在刚exec子进程中只读标准输入

在父进程中将标准输入复制到管道的写入文件描述符中。

这应该避免大部分的困惑。

总结

以上是内存溢出为你收集整理的getline()函数行为奇怪全部内容,希望文章能够帮你解决getline()函数行为奇怪所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存