chan 需要两个进程,一个写,一个读,是分开的,

package main

import (
"bufio"
"fmt"
"math/rand"
"os"
"strings"
"sync"
"time"
) type (
cdnfileinfo struct {
filename string
buf []byte
sync.RWMutex
wrtype int
serr string
}
fileWrok interface {
isDirExtxit(path string) int
Writefile(b *backset)
Readfile(b *backset)
Randfilename(b *backset)
}
fileWorkint interface {
Randfilename(b *backset)
} Workout struct {
fileWrok
}
workInt struct {
fileWorkint
}
backset struct {
ducks chan cdnfileinfo
} ) func (fi *Workout) isDirExtxit(path string) int {
finfo, er := os.Stat(path)
if er != nil {
return 0
}
if finfo.IsDir() {
return 1
} else {
return 2
} }
func (fi *workInt)Randfilename(b *backset) {
for {
duck := cdnfileinfo{
filename: "D:/Text/log" + fmt.Sprint(rand.Intn(999999)) + ".txt",
wrtype: 2,
buf: []byte("添加测试"),
}
fmt.Printf("type:%d filename:%s \n", duck.wrtype, duck.filename)
b.ducks <- duck
time.Sleep(time.Second)
}
} func (fi *Workout) Writefile(b *backset) {
for {
duck, _ := <-b.ducks
pos := strings.LastIndex(duck.filename, "/")
path := duck.filename[0 : pos+1]
switch fi.isDirExtxit(path) {
case 0:
{
er := os.Mkdir(path, os.ModePerm)
if er != nil {
continue
}
}
case 2:
{
continue
} } f, er := os.OpenFile(duck.filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if er != nil { }
fbuf := bufio.NewWriter(f)
fbuf.Write(duck.buf)
fbuf.Flush()
fmt.Printf("type:%d filename:%s \n", duck.wrtype, duck.filename)
}
}
func (fi *Workout) Readfile(b *backset) error {
duck,_:= <- b.ducks
_, er := os.Stat(duck.filename)
if er != nil {
return nil
}
sf, er := os.Open(duck.filename)
if er != nil {
return er
}
rbuf := bufio.NewReader(sf)
n, er := rbuf.Read(duck.buf)
if er != nil {
return nil
}
if n == 0 {
return fmt.Errorf("读取文件为空")
}
return nil
} func main() {
wa := new(sync.WaitGroup) p := new(workInt)
c := new(Workout)
b := &backset{
ducks: make(chan cdnfileinfo),
} wa.Add(2)
go func() {
p.Randfilename(b)
wa.Done()
}()
go func() {
c.Writefile(b)
wa.Done()
}() wa.Wait() }

最新文章

  1. 题目一:打印出所有的 &quot;水仙花数 &quot;,所谓 &quot;水仙花数 &quot;是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 &quot;水仙花数 &quot;,因为153=1的三次方+5的三次方+3的三次方。
  2. OCP-052 &amp; 053部分答案解析
  3. [deviceone开发]-do_GridView的简单示例
  4. 使用XIB实现一个简单view
  5. oracle4
  6. Excel 国家甘特图(多图)
  7. Linux命令之nano -
  8. Data Guard 的三种保护模式
  9. 开源干货!!!.NET Core + JWT令牌认证 + Vue.js(iview-admin) 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!
  10. Good Time 冲刺 二
  11. 编译:ffmpeg,精简ffmpeg.exe
  12. 【C++ 模板迭代器实例/半素数】
  13. 让SQL SERVER自动清理掉处于SLEEPING状态超过30分钟的进程(转)
  14. 虚拟机挂载光盘,同时修改yum源为光盘挂载目录
  15. python 多进程和子进程1
  16. centos6默认python2.6升级2.7 卸载python2.6升级2.7
  17. Python 爬虫 解决escape问题
  18. 287find-the-duplicate-number
  19. Java基础(四):Java Number &amp; Math 类、Character 类、String 类、StringBuffer &amp; StringBuilder 类
  20. Spring IOC 源码简单分析 04 - bean的初始化

热门文章

  1. NOI2019 回家路线 DP
  2. PHP入门之调试
  3. KVM原理及使用
  4. 【POJ3278】Catch That Cow
  5. fiddler自动生成jmeter测试脚本
  6. 暑假gosh计划
  7. WDM驱动改可手动加卸载的NT驱动
  8. SAS 分层抽样示例代码
  9. C#实现图像拖拽以及锚点缩放功能
  10. 014 Mui