码迷,mamicode.com
首页 > 其他好文 > 详细

Golang 实现简单的滚动读取文本更新

时间:2016-07-21 14:50:48      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

      这个小程序要实现的效果,简单地说,就是将目标文件的内容读取输出到终端,并且目标文件并不是静态的,而是随时会添加新的内容。我们的目标就是一旦目标文件添加了新的内容,就把它读取出来并且显示到终端上。

     实现方法很简单,用一个变量offset标记已经读到了文件的哪个位置,每次循环开始前就将读指针指到相应位置。这里有两个tricky的地方需要注意,我们在每次循环的时候都要重复地打开和关闭文件,否则文件有更新也读不出来。当我们读到文件末尾时,会多读出一个字符(文件结束标识符?)。具体的实现如下:

package main

import (
	"fmt"
	"os"
	"io"
	"time"
)

func main() {
	file := os.Args[1];
	buf := make([]byte, 1024)
	offset := 0
	for {
		f, err := os.Open(file)
		if err != nil {
			fmt.Printf("open file %s failed: %v\n", file, err)
			return
		}

		f.Seek(int64(offset), 0)
		
		n, err := f.Read(buf)
		if err != nil && err != io.EOF {
			fmt.Printf("read file %s failed: %v\n", file, err)
			return
		}
		if (n > 1) {
			if (n < len(buf)) {
				n--
			}
			fmt.Printf("%s", string(buf[:n]))
			offset += n
		}

		f.Close()
		time.Sleep( 1 * time.Second )
	}
	
}

  

Golang 实现简单的滚动读取文本更新

标签:

原文地址:http://www.cnblogs.com/YaoDD/p/5691558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!