本文节选自《LPC语言基础教程:从零学习游戏开发》,版权归@mudren,欢迎转载,但必须注明来源(mud.ren)。
LPC中有大量和文件系统相关的外部函数,包括:cp、file_size、get_dir、link、mkdir、read_bytes、read_file、rename、rm、rmdir、stat、write_bytes、write_file。
还有三个异步操作的函数:async_getdir、async_read、async_write。
还有三个 apply 方法:valid_read、valid_write和 valid_link 。
具体函数说明请点击函数名称转至说明文档。以下是文件操作的代码演示:
int main(object me, string arg)
{
if (!arg)
{
arg = "/u/test";
}
// 创建目录
mkdir(arg);
// 写入文件
write_file(arg + "/test", "");
// 重命名
rename(arg + "/test", arg + "/test.c");
// link
link(arg + "/test.c", arg + "/test1.c");
// 复制文件
cp(arg + "/test.c", arg + "/test2.c");
// get_dir
printf("%O\n", get_dir(arg));
// 删除文件
// rm(arg + "/test.c");
// rm(arg + "/test1.c");
// rm(arg + "/test2.c");
// 删除目录
// rmdir(arg);
return 1;
}
需要注意的是rmdir不可删除非空目录,所有文件的读写操作都会通过 valid_read 和 valid_write 校验是否有权限,而link操作需要valid_link检验是否有权限,关于这三个apply方法的实现可以参考开源的各MUD的MASTER_OB中的代码。
关于文件系统,这里提示一下路径的问题,在FluffOS中,路径默认都是从MUD的根目录开始,对efun中涉及到文件路径的你不需要加/(MUD中大家还是习惯都是/开头),另外get_dir("")、get_dir("/")、get_dir(".")也都是代表根目录。
WWW
FluffOS v2019支持websocket,内置了HTTP服务,通过websocket端口访问的是www目录,所以利用文件操作相关函数,可以实时的在www下生成网页实现一些WEB服务,也可以通过external_cmd调用系统指令生成图片验证码让玩家查看。