- This locks-up on macos.
- It's something due to the out fifo.
- Reading from the in fifo seems to work ok.
- Works great on Linux.
make run| app | |
| 6461f4aa65877e88485c8a0b888a579c |
| FROM scratch | |
| COPY app / | |
| ENTRYPOINT ["/app"] |
| package main | |
| import ( | |
| "bufio" | |
| "fmt" | |
| "io" | |
| "log" | |
| "os" | |
| "time" | |
| ) | |
| // | |
| func main() { | |
| var in *bufio.Reader | |
| if i, err := os.OpenFile("in", os.O_RDONLY, 0); err != nil { | |
| log.Fatalln(err) | |
| return | |
| } else { | |
| in = bufio.NewReader(i) | |
| } | |
| out, err := os.OpenFile("out", os.O_WRONLY, 0666) | |
| if err != nil { | |
| log.Fatalln(err) | |
| return | |
| } | |
| defer out.Close() | |
| for { | |
| line, err := in.ReadBytes('\n') | |
| if err == io.EOF { | |
| return | |
| } | |
| if err != nil { | |
| log.Println(err) | |
| return | |
| } else { | |
| log.Println(string(line)) | |
| fmt.Fprint(out, time.Now(), string(line)) | |
| } | |
| } | |
| } |
| build: app | |
| docker build --tag pipe . | |
| SOURCES := $(wildcard *.go) | |
| app: $(SOURCES) | |
| go vet | |
| env CGO=false GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -a -installsuffix cgo -v -o $@ | |
| go build -o $@ | |
| run: in out build | |
| cat out & | |
| docker run -d --name fifo -v $(PWD)/in:/in -v $(PWD)/out:/out pipe | |
| cat main.go >in | |
| in out: | |
| mkfifo $@ | |
| clean: | |
| rm -f in out app 6461f4aa65877e88485c8a0b888a579c | |
| docker rm fifo || true | |
| docker rmi pipe:latest || true |