64,646
社区成员
发帖
与我相关
我的任务
分享
typedef struct _myFILE myFILE;
设计这样的对外接口,模拟文件读写的接口:myFILE *lpFile = myOpen("file.ext", MOF_READ);
if (lpFile != NULL)
{
char szInfo[] = "Hello!";
myWrite(lpFile, szInfo, sizeof(szInfo));
myClose(lpFile);
}
你可以看到,对于使用者而言,lpFile 指向的内容并不重要,其只是一个 handle,用来读写文件关闭文件。
或者设计这样的二级指针接口,将一级指针作为参数传入:typedef struct _InternalFILE {
int fd;
int other1;
int other2;
...;
} InternalFILE;
假定代码如下,有一个内部结构,而返回值或参数使用的外部结构,只有一个预声明而没有实体,从而使得信息对外隐蔽,并且无需关心实现细节:int myCreate(const char *lpPath, myFILE **ppFile)
{
InternalFILE *pif = malloc(sizeof(InternalFILE));
if (pif != NULL)
{
int fd = open(lpPath, _O_CREATE);
if (fd != -1)
{
pif->fd = fd;
pif->other1 = ...;
...;
*ppFile = (myFILE *)pif;
return 1;
}
}
return 0;
}
调用如下:mmyFILE *lpFile;
if (myCreate("file.ext", &lpFile))
{
char szInfo[] = "Hello!";
myWrite(lpFile, szInfo, sizeof(szInfo));
myClose(lpFile);
}
这种情况下,其返回的方式与第一个有所不同,但最终还是以一级指针作为传入的方式来使用。
这两种情况,myFILE 指针对外就像 HWND 一样不可见。只要有值,就可以拿来用,无需关心内部实现。