socket fdopen有关问题
socket fdopen问题
每次加上
这几行,我设置断点,居然在:
afd = accept(lfd,(struct sockaddr *)&cin,&len);这一行出错:
运行结果:
afd: Invalid argument
如果不加这几行,就不报错?为什么?求解
------解决方案--------------------
你自己代码写的很清楚了啊,
fopen(***,"a+");这是追加方式,默认文件指针是到文件尾部的,因此你一gets就会出错
fopen(***,"r");这是读方式,默认开始指针是在文件头部的,因此你gets没问题
- C/C++ code
#include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <unistd.h> #include <sys/socket.h> #include <string.h> #include <fcntl.h> int main(void) { struct sockaddr_in sin; struct sockaddr_in cin; int lfd; int afd; FILE * fp; socklen_t len; char buf[400]; bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(8000); sin.sin_addr.s_addr = INADDR_ANY; lfd = socket(AF_INET,SOCK_STREAM,0); if(lfd < 0) { perror("socket"); exit(1); } if(bind(lfd,(struct sockaddr *)&sin,sizeof(sin)) == -1) { perror("bind"); exit(1); } listen(lfd,10); while(1) { bzero(buf,400); afd = accept(lfd,(struct sockaddr *)&cin,&len); if(afd < 0) { perror("afd"); exit(1); } printf("错在哪?\n"); fp = fdopen(afd,"a+"); fgets(buf,400,fp); printf("%s\n",buf); fclose(fp); close(afd); } return EXIT_SUCCESS; }
每次加上
- C/C++ code
fp = fdopen(afd,"a+"); fgets(buf,400,fp); printf("%s\n",buf);
这几行,我设置断点,居然在:
afd = accept(lfd,(struct sockaddr *)&cin,&len);这一行出错:
运行结果:
afd: Invalid argument
如果不加这几行,就不报错?为什么?求解
------解决方案--------------------
你自己代码写的很清楚了啊,
fopen(***,"a+");这是追加方式,默认文件指针是到文件尾部的,因此你一gets就会出错
fopen(***,"r");这是读方式,默认开始指针是在文件头部的,因此你gets没问题