作者:ycy1873187 | 来源:互联网 | 2024-11-15 20:45
1、简单模式
在简单模式下,Lua假设存在一个当前输入流和一个当前输出流,所有的I/O操作都在这些流上进行。默认情况下,当前输入流被初始化为标准输入(stdin),当前输出流被初始化为标准输出(stdout)。io.read
函数用于从标准输入中读取数据。
io.input
函数用于重定向输入,io.output
函数用于重定向输出。
io.write
函数可以接受任意数量的字符串或数字,并将它们输出到当前输出流。
print
函数与io.write
的区别在于:print
通常用于快速调试,因为它会自动将参数转换为字符串并添加换行符,而io.write
则不会添加额外的字符,更适合需要精确控制输出的场景。此外,print
函数会自动调用tostring
来转换参数,这可能会隐藏一些小问题。如果需要完全控制转换过程,可以使用string.format
。
io.read
函数可以从当前输入流中读取字符串,支持以下参数:
"a" | 读取整个文件 |
"l" | 读取下一行(不包含换行符) |
"L" | 读取下一行(包含换行符) |
"n" | 读取一个数字 |
num | 读取指定数量的字符作为字符串 |
文件迭代行读取示例如下:
当使用多个参数时,io.read
会为每个参数返回对应的结果。例如,对于以下输入:
结果如下:
2、完整模式
在完整模式下,Lua提供了更多的文件操作功能。以下是一些常用的函数:
io.open | 打开文件,类似于C语言中的fopen 函数。 |
io.input | 不带参数时获取当前输入流,带参数时设置当前输入流。 |
io.tmpfile | 返回一个临时文件的流,程序结束后该文件会自动删除。 |
io.flush | 将缓冲区的内容刷新到文件中。 |
setvbuf | 设置流的缓冲模式,支持无缓冲(no)、全缓冲(full)和行缓冲(line)。 |
seek | 获取或设置文件流的位置,通用形式为f:seek(whence, offset) ,其中whence 支持set 、cur 和end 。 |
如果io.open
打开文件失败,可以使用local f = assert(io.open(filename, mode))
来进行错误处理。
文件打开后,可以使用流对象的方法进行读写操作。Lua还提供了三个预定义的流:io.stdin
、io.stdout
和io.stderr
。
3、系统调用
Lua还提供了一些系统调用函数,用于执行文件和进程管理操作。以下是一些常用的系统调用函数:
os.rename | 重命名文件。 |
os.remove | 删除文件。 |
os.exit | 终止程序。 |
os.getenv | 获取环境变量的值。 |
os.execute | 执行系统命令。 |
io.popen | 连接命令的输入或输出到一个本地流,并返回该流。 |