Winsock套接字不能用 _open_osfhandle()函数映射为一个流文件
_open_osfhandle()函数在windows下可以将一个win32打开的文件句柄映射成为一个普通的C库里面的流文件接口,参见下例:
void OSFileToCRTFile()
{
HANDLE hFile = CreateFile("c://test.dat", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
char szText[] = "Hello world!/n";
DWORD dwWritten;
WriteFile(hFile, szText, strlen(szText), &dwWritten, NULL);
FILE* pFile = NULL;
int nHandle = _open_osfhandle((long)hFile, _O_TEXT | _O_APPEND);
if (nHandle != -1)
pFile = _fdopen(nHandle, "wt");
if(pFile)
{
int n = fputs("write by FILE*!", pFile);
fflush(pFile);//立即写入文件
// n == 0
}
CloseHandle(hFile);
}
在Linux下可以不必用这个函数,Linux的世界里都是文件,但是在windows下对套接字winsock却不可以这样映射,已经试验验证过了。
本文介绍了在Windows环境下使用_open_osfhandle函数将Win32文件句柄转换为C库流文件接口的方法,并指出该函数无法用于Winsock套接字的映射。通过示例展示了如何操作文件。

905

被折叠的 条评论
为什么被折叠?



