我有一个插座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
是一个文件,aclose
将随后被调用,并且fclose
会失败。
如果我只使用close
, struct 的内存FILE
就会泄露。
如何正确关闭它?
更新:
使用fdopen
一次与"r+"
使读取和写入共享同一个锁,但我除了发送和接收单独工作。