demo: oslookpath; syscall.Lstat/Stat

This commit is contained in:
xushiwei
2024-07-11 19:21:04 +08:00
parent a5ff25b0fe
commit aac820a8d5
3 changed files with 42 additions and 1 deletions

View File

@@ -0,0 +1,19 @@
package main
import (
"fmt"
"os/exec"
"runtime"
)
func main() {
ls := "ls"
if runtime.GOOS == "windows" {
ls = "dir"
}
lspath, _ := exec.LookPath(ls)
if lspath != "" {
ls = lspath
}
fmt.Println(ls)
}

View File

@@ -24,6 +24,7 @@ import (
_ "unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/syscall"
)
const (
@@ -40,7 +41,10 @@ type (
GidT C.gid_t
OffT C.off_t
DevT C.dev_t
StatT C.struct_stat
)
type (
StatT = syscall.Stat_t
)
//go:linkname Errno errno

View File

@@ -124,3 +124,21 @@ func Close(fd int) (err error) {
}
return Errno(os.Errno)
}
type Stat_t = syscall.Stat_t
func Lstat(path string, stat *Stat_t) (err error) {
ret := os.Lstat(c.AllocaCStr(path), stat)
if ret == 0 {
return nil
}
return Errno(os.Errno)
}
func Stat(path string, stat *Stat_t) (err error) {
ret := os.Stat(c.AllocaCStr(path), stat)
if ret == 0 {
return nil
}
return Errno(os.Errno)
}