Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的嵌入式Lua从标准输入获取输入_C_Lua_Embed - Fatal编程技术网

C中的嵌入式Lua从标准输入获取输入

C中的嵌入式Lua从标准输入获取输入,c,lua,embed,C,Lua,Embed,我正在编写一个C应用程序,其中嵌入了lua脚本。Lua脚本从STDIN获取输入。因此,当我从shell运行脚本时,它是这样的: lua myscript.lua < datafile* lua myscript.lua

我正在编写一个C应用程序,其中嵌入了lua脚本。Lua脚本从STDIN获取输入。因此,当我从shell运行脚本时,它是这样的:

lua myscript.lua < datafile*
lua myscript.lua
如何从C代码内部实现这一点

谢谢。

使用描述符
0
(stdin)上的
dup2(2)
系统调用和
数据文件
上的
open(2)
返回的描述符:

int fd = open("datafile", O_RDONLY);
dup2(fd, 0);
/* reading from stdin now is in fact reading from datafile */
当然,在实际程序中需要进行一些错误检查

要实现通配符的行为,您可能需要查看
readdir(3)
库函数。

在描述符
0
(stdin)和数据文件
open(2)
返回的描述符上使用
dup2(2)
系统调用:

int fd = open("datafile", O_RDONLY);
dup2(fd, 0);
/* reading from stdin now is in fact reading from datafile */
当然,在实际程序中需要进行一些错误检查


要实现通配符的行为,您可能需要查看
readdir(3)
库函数。

您是否尝试过不经修改地运行脚本(即使用
io.stdin
等)?除非你在C端做了一些花哨的事情,否则它应该是开箱即用的。

你是否尝试过不经修改地运行脚本(即使用
io.stdin
等)?除非你在C端做了一些有趣的事情,否则它应该是开箱即用的。

在那一点上,我应该如何将STDIN传递到lua_状态?这段代码将你的程序的STDIN(Lua和其他人一样从中读取的STDIN)更改为文件描述符。没有什么可以传递的。我怎么能在那个时候把STDIN传递给卢奥州呢?这段代码将你的程序的STDIN(Lua和其他人一样从中读取的STDIN)更改为文件描述符。没有什么可以传递的。你想让
你的程序
正常工作,还是想知道如何在没有shell的情况下在C中实现上述功能?两者兼而有之。我可能没有解释清楚。在程序中(这是Lua中解析器脚本的包装器),我从程序中的数据文件(或数据文件,可能以后会是一个FIFO命名管道)获取每一行。我想在我有了每一行代码之后,把它作为stdin发送给lua解析器。你想让
yourprogram
工作,还是想知道如何在没有shell的情况下在C内部执行与上面相同的操作?两者兼而有之。我可能没有解释清楚。在程序中(这是Lua中解析器脚本的包装器),我从程序中的数据文件(或数据文件,可能以后会是一个FIFO命名管道)获取每一行。我想在我有了每一行之后,把它作为stdin发送给lua解析器。