golang os.Stdin 사용해서 커맨드라인 파이프 사용하기
바이너리 파일 출력
main.go
package main
import (
"fmt"
"io"
"os"
)
func main() {
fi, err := os.Stdin.Stat()
if err != nil {
fmt.Println(err)
return
}
if (fi.Mode() & os.ModeNamedPipe) == 0 {
fmt.Println("no pipe")
return
}
fmt.Println("pipe")
buf := make([]byte, 4096, 4096)
for {
n, err := os.Stdin.Read(buf)
if err == io.EOF {
break
}
if err != nil {
fmt.Println(err)
break
}
fmt.Printf("bytes %x\n", buf[:n])
}
}
$ go build -o PipeTest.exe main.go
$ tar czp /data/db/mariadb/backup/full | ./PipeTest.exe
텍스트 파일 출력
main.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
fi, err := os.Stdin.Stat()
if err != nil {
fmt.Println(err)
return
}
if (fi.Mode() & os.ModeNamedPipe) == 0 {
fmt.Println("no pipe")
return
}
fmt.Println("pipe")
//var buf []byte
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Printf("%s\n", scanner.Bytes())
//buf = append(buf, scanner.Bytes()...)
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
}
//fmt.Printf("%s\n", buf)
}
$ go build -o PipeTest.exe main.go
$ cat /data/logs/server.log | ./PipeTest.exe
references
https://zetcode.com/golang/pipe/
'golang' 카테고리의 다른 글
golang tcp socket option 설정 (0) | 2025.03.11 |
---|---|
golang 현재 디렉토리 경로 가져오기 (0) | 2025.03.11 |
golang windows service (0) | 2025.01.05 |
golang smtp email send (0) | 2025.01.05 |
golang generic 사용으로 empty interface boxing, unboxing 코드 수정 (1) | 2024.10.06 |