在Go中,为什么“ File.Readdirnames”进行“ clock_gettime”系统调用?

As a follow up to this question, I am trying to write a Go program that only lists a files name in an efficient matter without unnecessary system calls. This is what I have thus far:

package main

import (
        "os"
        "fmt"
        "log"
)

func main() {

        // Open directory and check for errors
        f, err := os.Open(".")
        if err != nil {
                log.Fatal(err)
        }

        // Get file names
        files, err := f.Readdirnames(0)
        if err != nil {
                log.Fatal(err)
        }

        // Print files
        fmt.Print(files, "
")
}

However, when I run an strace, I see many of the following:

clock_gettime(CLOCK_REALTIME, {1406822401, 824793686}) = 0

What does that pertain to? How can I make this code more efficient?

I am spitballing, but I would think that it is related to Go's built-in scheduler and garbage collection.

Short answer is, go will never be quite as fast as C because it provides all of that extra runtime functionality which C doesn't.

The code you listed is probably the fastest way to do what you want in Go.

clock_gettime is just a system call,which is called in go's runtime. runtime do a lot of things, schedual, and so on, so it's normal for so many clock_gettime.

I don't think you can make this program more efficient, 'cause it is just for so tiny function .You shouldn't mind it.