【发布时间】:2013-09-22 21:19:57
【问题描述】:
我有一个套接字sock:
int sock = socket(...);
connect(sock, ...);
// or sock = accept(sock_listen, 0, 0);
并且我用fdopen打开了两次,这样就可以使用stdio中的缓冲读写器,比如fwrite、fread、fgets和fprintf。
FILE *f_recv = fdopen(sock, "wb");
FILE *f_send = fdopen(sock, "rb");
// some IO here.
close(sock);
fclose(f_recv);
fclose(f_send);
但正如我们所知,如果我 fclose 一个文件,随后将调用 close,而 fclose 将失败。
如果我只使用close,结构FILE的内存就会泄露。
如何正确关闭?
更新:
将fdopen与"r+"一起使用一次可以使读写共享同一个锁,但我除了发送和接收单独工作。
【问题讨论】:
-
您没有“打开它两次”。您只是将 STDIO 流包裹在它周围。由于您给出的原因,您需要关闭它们。