您的位置:ACE 开发者 >> 论坛 >> ACE基础应用 >> 查看帖子
字体: 小 中 大
peakzhang 发表于: 2008-1-15 21:48 来源: ACE 开发者
CODE:
// Create a temporary filename. ACE_FILE_Addr filename (ACE_sap_any_cast (ACE_FILE_Addr &)); if (fn != 0) filename.set (fn); ACE_FILE_Connector connector; ACE_FILE_IO file; // Open up the file. if (connector.connect (file, filename, 0, ACE_Addr::sap_any, 0, ((writing) ? (O_RDWR | O_CREAT) : O_RDONLY), ACE_DEFAULT_FILE_PERMS) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("connect failed for %p\n"), filename.get_path_name ()), 1);
最新回复
CODE:
// Create a temporary filename.
用这种方式了!ACE中对文件的操作推荐用这种方法,ACE_OS::fseek()一类的操作只是为了提供对各平台的接口ACE_FILE_Addr filename (ACE_sap_any_cast (ACE_FILE_Addr &));
if (fn != 0)
filename.set (fn);
ACE_FILE_Connector connector;
ACE_FILE_IO file;
// Open up the file.
if (connector.connect (file,
filename,
0,
ACE_Addr::sap_any,
0,
((writing) ? (O_RDWR | O_CREAT) : O_RDONLY),
ACE_DEFAULT_FILE_PERMS) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("connect failed for %p\n"),
filename.get_path_name ()),
1);
ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服务器,而进行文件操作的类(ACE_FILE_IO)被看做是一个Socket Client。
有了上面的认识,使用ACE的文件操作就容易理解了:
调用ACE_FILE_IO.send(...)其实就是进行写文件的操作;
调用ACE_FILE_IO.recv(...)其实就是进行文件的读操作。
ACE里面的文件操作类主要包括:ACE_IO_SAP、ACE_FILE、ACE_FILE_IO、ACE_FILE_Connector。
ACE_FILE_Connector是一个用来产生ACE_FILE_IO的类工厂。
ACE_FILE_IO继承于ACE_FILE,ACE_FILE继承于ACE_IO_SAP。
ACE_FILE只能够对文件进行一些整体性的操作,如:关闭文件(close)、删除文件(remove/ulink)、获取文件属性(get_info)、设置文件大小(truncate)、定位或获取文件游标位置(seek/position/tell)、获取文件路径(get_local_addr/get_remote_addr)。
ACE_FILE_IO则能够进行文件的读写操作,如:多个版本的send/recv, send_n/recv_n, sendv/recvv, sendv_n/recvv_n
ACE_FILE_Connector实际是为了使ACE_FILE类族能够符合Connector/Acceptor设计模式而设计的,只是没有相应的Acceptor。
typedef long off_t;
在64位机器上,long是64位的!