Lua--协同线程与文件IO

Lua--协同线程与文件IO
协同线程Lua中有一种特殊的线程称为coroutine协同线程简称协程。其可以在运行时暂停执行然后转去执行其他线程然后可以返回再继续执行没完成的内容。即可以“走走停停停停走走”。任意时刻只会有一个协程执行不会出现多个协程同时执行的情况。协同线程的类型为thread其启动、暂停、重启等通过函数来控制具体方法如下-- 创建一个协同线程实例 co coroutine.create(function(a,b) print(a,b,ab) -- 获取正在运行的协同线程实例 local co coroutine.running() -- 输出协同线程实例的状态 print(coroutine.status(co)) -- 将当前协同线程挂起 coroutine.yield() print(协同线程恢复了) end) -- 启动协同线程 coroutine.resume(co,1,2) -- 输出协同线程的状态 print(主线程查看协同线程状态..coroutine.status(co)) -- 恢复协同线程的运行不传后面的参数了因为协同线程已经挂起了 coroutine.resume(co) -- 输出协同线程的状态 print(主线程查看协同线程状态..coroutine.status(co))运行结果如下协同函数协同线程可以单独创建执行也可以通过协同函数调用启动执行。使用coroutine的wrap函数创建的就是协同函数类型为function。协同函数的调用会启动其内置的协同线程。-- 创建一个协同函数 co coroutine.wrap(function(a,b) print(a,b,ab) local co coroutine.running() print(coroutine.status(co)) coroutine.yield() print(协同线程恢复了) print(a,b,ab) end) -- 调用协同函数启动协同线程 co(1,2) co()运行结果如下文件IO文件IO的函数分为两类静态函数与实例 函数。静态函数通过io.xxx()方式对文件进行操作。实例函数通过面向对象的方式操作。常用静态函数io.open() 以指定模式打开文件返回文件对象。格式io.open(filename,mode)模式mod有三种r:只读默认模式w只写会覆盖原内容a只写追加写入增加符在r ,w,a均变为了读写b二进制符如果文件为二进制文件。则需要变为rb、wb、abio.input() 指定要读取的文件格式io.input(file)io.output() 指定要写入的文件格式:io.outputfileio.read() 以指定格式读取io.input(file)中的内容。格式io.read(format)format 的格式有*l从当前位置的下一个位置读取整行默认格式*n读取下一个数字*a从当前位置的下一个位置读取整个文件number这是一个数字表示要读取的的字符的个数io.write(data) 将数据data写入到io.output中指定的文件-- 以只读方法打开一个文件 local file io.open(test.txt,r) io.input(file) -- 读取文件内容并输出 local content io.read(*a) print(content) -- 关闭文件 file:close()-- 以只读方法打开一个文件 local file io.open(test.txt,r) io.input(file) -- 读取文件内容并输出 local content io.read(*a) print(content) -- 关闭文件 file:close() -- 以追加方法打开一个文件 local file io.open(test.txt,a) io.output(file) -- 向文件中写入内容 io.write(这是追加的内容\n) -- 关闭文件 file:close()常用实例函数file:read() 这里的file是io.open() 返回的file用法与io.read()相同file:write()与io.write()相同file:seek()获取或设置文件读写指针的位置。位置从1开始除文件最后一行外每行都有行结束符其占两个字符位置。位置0 表示文件第一个位置。格式file:seek(whence,offset)当seek无参时返回读写指针的位置。参数whence有三种表示将指针定位到不同位置。参数offset 表示相对于whence 位置的偏移量offset默认0为正表示向后偏移为负表示向前偏移。​ whence的三种值1. set将指针定位到文件开头处即0位置处2. cur指针保持当前位置不变默认3. end将指针定位到文件结尾处-- 以只读方法打开一个文件 file io.open(test.txt,r) -- 读取文件内容并输出 local content file:read(*a) print(content) -- 关闭文件 file:close() -- 以追加方法打开一个文件 file io.open(test.txt,a) -- 向文件中写入内容 file:write(这是追加的内容\n) -- 关闭文件 file:close() file io.open(test.txt,r) pos file:seek() print(当前文件指针位置..pos) -- 将文件指针移动到文件开头 file:seek(set,0) pos file:seek() print(当前文件指针位置..pos) -- 将文件指针移动到文件末尾 file:seek(end,0) pos file:seek() print(当前文件指针位置..pos)