[go] 명령 실행 파일 시간 정보
Go 언어로 개발한 프로그램에서 실행 중인 파일(바이너리)의 생성 시간 정보를 가져오는 방법을 알아보겠습니다.
파일의 수정 시간 가져오기
Go 언어 내장 패키지인 os
와 time
을 사용하여 파일의 수정 시간을 가져올 수 있습니다. 아래는 파일 수정 시간을 가져오는 예제 코드입니다.
package main
import (
"fmt"
"os"
"time"
)
func main() {
fileInfo, err := os.Stat("filename.txt")
if err != nil {
fmt.Println(err)
return
}
modTime := fileInfo.ModTime()
fmt.Println("File modified time:", modTime)
}
위의 예제 코드에서는 os.Stat
함수를 사용하여 파일의 정보를 가져오고, ModTime
메서드를 사용하여 파일의 수정 시간을 출력하고 있습니다.
파일의 생성 시간 가져오기
Go 언어에서는 파일의 생성 시간을 직접 지원하지는 않지만, 운영 체제에 따라 파일의 시간 정보를 가져올 수 있는 라이브러리가 있습니다.
Windows
Windows 운영 체제에서는 syscall
패키지를 사용하여 파일의 생성 시간을 가져올 수 있습니다. 아래는 Windows에서 파일의 생성 시간을 가져오는 예제 코드입니다.
package main
import (
"fmt"
"syscall"
"time"
)
func main() {
const path = "filename.txt"
fd, err := syscall.CreateFile(path, syscall.GENERIC_READ, syscall.FILE_SHARE_READ, nil, syscall.OPEN_EXISTING, syscall.FILE_ATTRIBUTE_NORMAL, 0)
if err != nil {
fmt.Println(err)
return
}
defer syscall.CloseHandle(fd)
var ctime syscall.Filetime
err = syscall.GetFileTime(fd, nil, nil, &ctime)
if err != nil {
fmt.Println(err)
return
}
creationTime := time.Unix(0, ctime.Nanoseconds())
fmt.Println("File creation time:", creationTime)
}
Unix
Unix 계열 운영 체제(예: Linux, macOS)에서는 syscall
패키지와 os
패키지를 함께 사용하여 파일의 생성 시간을 가져올 수 있습니다. 아래는 Unix 계열 운영 체제에서 파일의 생성 시간을 가져오는 예제 코드입니다.
package main
import (
"fmt"
"os"
"syscall"
"time"
)
func main() {
fileInfo, err := os.Stat("filename.txt")
if err != nil {
fmt.Println(err)
return
}
stat := fileInfo.Sys().(*syscall.Stat_t)
creationTime := time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec))
fmt.Println("File creation time:", creationTime)
}
마치며
위의 예제 코드를 통해 Go 언어를 사용하여 실행 중인 파일의 생성 시간 정보를 가져오는 방법에 대해 알아보았습니다. 각 운영 체제에 따라 파일 생성 시간을 가져오는 방법이 조금씩 다를 수 있으니 해당 운영 체제에 맞는 방법을 사용하시기 바랍니다.
참고 자료:
- https://golang.org/pkg/os/
- https://golang.org/pkg/syscall/
- https://pkg.go.dev/golang.org/x/sys/windows#example-CreateFile–EE [Windows]
- https://github.com/golang/go/blob/master/src/syscall/syscall.go#L1403 [Unix]