首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

socket fdopen有关问题

2012-10-31 
socket fdopen问题C/C++ code#include stdio.h#include stdlib.h#include netinet/in.h#include un

socket fdopen问题

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没问题

热点排行