前言#
前两章我们个一直提到一个词就是默认文件描述符,他到底是个什么东西(它不是个东西O(∩_∩)O),我们来一起看一下,默认的文件描述符分为默认输入文件描述符和默认输出文件描述符,也就是一些需要文件描述符的函数,如果不传这个参数就会使用默认的。
内容#
io.input()##
- 原型:io.input ([file])
- 解释:打开一个文件,然后把这个文件作为默认的输入文件,如果参数是一个文件名,则会以文本模式打开这个文件,并将这个文件句柄设置为默认输入文件;如果参数就是一个文件描述符,那么这个函数会把这个文件简单的设置为默认的输入文件;如果使用函数时不传参数,那么它将的返回当前的默认文件的描述符。
io.output()##
- 原型:io.output([file])
- 解释:与函数
io.input()
使用方法一致,只不过操作的都是默认的输出文件的描述符。
Usage##
- 首先新建一个文件,将文件命名为inputtest.lua然后编写如下代码:
-- 测试默认输出文件
io.write("write start\n")
-- 默认的输入文件是命令行
local cmd_content = io.read("*l")
print("command line content:")
print(cmd_content)
-- 设置默认的输入文件
io.input("iotest.txt")
local txt_content = io.read("*l")
print("txt_content content:")
print(txt_content)
local file = io.input()
file:close()
-- 设置默认的输出文件
io.output("iotest.txt")
io.write("io.write")
-- 关闭默认输出文件
io.close()
-- 测试此时默认输出文件
io.write("io.write again")
-- 设置命令行为默认输出
io.output(io.stdout)
- 运行结果
总结#
- 由第一行运行结果可知,默认的输出文件描述符是
io.stdout
,也就是命令行界面,其实默认的输出文件描述符也是命令行界面,有运行结果可以推断出来。 - 这里复习了一下函数
io.close()
他会关闭默认的输出文件,这也就是为什么程序后面会报错的原因,因为默认的输出文件描述符已经关闭了,再次调用函数io.read()
就会报错。 - 为什么结果里没有输出文本“io.write”呢,原因就是默认的输出文件描述符已经改为文件iotest.txt,此后输出的内容都会保存在该文件中。
- 如果想恢复原来的默认输出文件描述符,按照代码的最后一行可以设置回来。