首页 > 其他 > 详细

socket编程过程中,流文件关闭顺序问题

时间:2015-07-21 13:04:27      阅读:307      评论:0      收藏:0      [点我收藏+]

程序片段:

int sock_fd;
FILE *sock_fpo, *sock_fpi, *pipe_fp;

sock_fd = accept(sock_id, NULL, NULL);
        if (sock_fd == -1 )
            oops("accept");
        if ((sock_fpi = fdopen(sock_fd, "r")) == NULL)
            oops("fdopen reading");
        if (fgets(dirname, BUFSIZ - 5, sock_fpi) == NULL)
            oops("reading dirname");
        if ((sock_fpo = fdopen(sock_fd, "w")) == NULL)
            oops("fdopen writing");
        if ((pipe_fp = popen(command, "r")) == NULL)
            oops("popen");
        while ((c = getc(pipe_fp)) != EOF)
            putc(c, sock_fpo);
        pclose(pipe_fp);
        pclose(sock_fpo);
        pclose(sock_fpi);

此程序片段为服务器socket片段,在调试过程中发现。当我将:

 pclose(sock_fpo);
 pclose(sock_fpi);

的顺序改为:

  pclose(sock_fpi);
  pclose(sock_fpo);

无法正确的将数据写到socket,并传递给客户端。

总结:

由于:pipe_fp, sock_fpo, sock_fpi的打开顺序为sock_fpi,sock_fpo,pipe_fp。

一定要以相反的顺序关闭描述符,先打开的后关闭。即:pipe_fp, sock_fpo, sock_fpi。

socket编程过程中,流文件关闭顺序问题

原文:http://my.oschina.net/u/2313065/blog/481082

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!