[go] 명령 실행 파일 시간 정보

Go 언어로 개발한 프로그램에서 실행 중인 파일(바이너리)의 생성 시간 정보를 가져오는 방법을 알아보겠습니다.

파일의 수정 시간 가져오기

Go 언어 내장 패키지인 ostime을 사용하여 파일의 수정 시간을 가져올 수 있습니다. 아래는 파일 수정 시간을 가져오는 예제 코드입니다.

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 언어를 사용하여 실행 중인 파일의 생성 시간 정보를 가져오는 방법에 대해 알아보았습니다. 각 운영 체제에 따라 파일 생성 시간을 가져오는 방법이 조금씩 다를 수 있으니 해당 운영 체제에 맞는 방법을 사용하시기 바랍니다.

참고 자료: