Filesystems 如何从lua中删除std文件管理

Filesystems 如何从lua中删除std文件管理,filesystems,lua,cross-platform,std,stdio,Filesystems,Lua,Cross Platform,Std,Stdio,我尝试将lua集成到我的项目中(lua 5.2.1) 我编译它没有问题 但我的问题是我的项目使用我自己的系统从文件系统读/写文件 因此,我开始修改lua以替换fopen/fclose/fread/fwrite的每个调用 但问题是,如果stdio fct使用一些我在项目中没有的文件功能(并且没有那么容易重新实现),那么Lua的混合太多了,比如: UNGET setvbuff 等等 我的问题^ 有人已经试过了吗?如果是,怎么做? 现在是否有人拥有此功能(某些c库使用回调fct请求打开/关闭文件)的l

我尝试将lua集成到我的项目中(lua 5.2.1) 我编译它没有问题

但我的问题是我的项目使用我自己的系统从文件系统读/写文件

因此,我开始修改lua以替换fopen/fclose/fread/fwrite的每个调用

但问题是,如果stdio fct使用一些我在项目中没有的文件功能(并且没有那么容易重新实现),那么Lua的混合太多了,比如: UNGET setvbuff

等等

我的问题^ 有人已经试过了吗?如果是,怎么做? 现在是否有人拥有此功能(某些c库使用回调fct请求打开/关闭文件)的lua扩展


我感到奇怪的是,真正用于多平台操作系统甚至嵌入式系统的lua如此强烈地使用std库,实际上对于真正的跨平台库,std中的每种类型和fct都进行了类型定义,以便于平台的具体更改

谢谢你能给我的任何帮助:)

你不是在问“Lua语言”的文件IO;你说的是“Lua,C库的”文件IO。这个问题并不清楚

卢阿对此有规定<例如,code>luaL\u loadfile就是一个函数的语法糖,该函数打开给定的文件,加载它,关闭文件,然后对其调用
luaL\u loadstring

如果您所处的环境中文件IO必须通过不同的通道,那么您不应该试图使
luaL_loadfile
与新的文件IO一起工作。您应该编写一个新函数,从文件系统加载文件并调用
luaL\u loadstring


简而言之:您不应该使用任何需要文件的luaapi。Lua基于文件的函数是方便函数;没别的了。Lua本身已经对此做出了规定;每个基于文件的API都有一个非基于文件的版本,可以很好地工作。您不应该修改Lua本身。

不确定,但我认为您跳过了。Lua的目标是以独立的C为核心,但Lua标准库无法做到这一点,因为它们的目标是将工具导出到Lua程序,包括C标准库中可用的工具。请参阅“我觉得很奇怪,lua在多平台操作系统甚至嵌入式系统上真正使用std-lib”,为什么?考虑到C标准库是标准的,这意味着如果您有一个C编译器,那么您很可能可以访问几乎所有C编译器附带的C标准库。因此,Lua应该像C一样跨平台。如果你在一个不支持C标准库的环境中工作,那么由你来处理这种非标准环境。当然,C标准库在任何可以编译C的地方都可以工作,但是实现和性能可能会随着编译器或平台的变化而变化,因此,typedef标准类型和#define标准函数可以让库的用户根据需要“覆盖”您的库对标准库的使用。例如,ogg lib使用ogg_alloc重新定义malloc,并在需要内存时在其所有代码中使用ogg_alloc,如果您为项目重新编译ogg,并且您希望通过查看malloc/free的每个调用来使用内存分析器,您可以通过自己的函数更改ogg_alloc的定义,而不是直接调用malloc,我对lua的期望是不要在is代码中直接使用fopen,而是使用一个define lua_fopen,它将被定义为fopen,直到您更改它为止,因为您的平台需要的不仅仅是一个普通的fopen,例如。对于其他标准函数的所有其他用途也是如此。PS: FCT是函数,抱歉我自己的系统管理文件是用C++编写的,我不想替换Lua IO库,我想要的是在打开一个LuaAub之后在C中更多,我调用LualLoLoad file(L,MyField.Lua),这个函数在Lua库里面,使用FOpenI,我想替换FOpenD(谁是C STD中的一个)by:MyFunctionToOpenAFile(…)同样适用于简单的文件函数,如open/fclose/fread/fwrite。。。。但是Lua使用了一些我不支持的标准文件函数,比如:ungetc