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

程序片段:

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编程过程中,流文件关闭顺序问题)