码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-21 13:06:19      阅读:227      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!