标签:
程序片段:
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。
标签:
原文地址:http://my.oschina.net/u/2313065/blog/481082