栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Go程序内部调用源

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Go程序内部调用源

您可以直接在终端设备中编写命令。但是,要做到这一点,首先您需要知道哪个设备正在使用该用户。执行程序的脚本可能是解决方案。

#!/bin/bashecho Running from foo script, pid = $$go run foo.go `tty`

然后,程序必须将命令写入终端设备。

package mainimport (    "C"    "fmt"    "os"    "syscall"    "unsafe")func main() {    // Get tty path    if len(os.Args) < 2 {        fmt.Printf("no tty pathn")        os.Exit(1)    }    ttyPath := os.Args[1]    // Open tty    tty, err := os.Open(ttyPath)    if err != nil {        fmt.Printf("error opening tty: %sn", err.Error())        os.Exit(2)    }    defer tty.Close()    // Write a command    cmd := "echo Hello from go, pid = $$n"    cmdstr := C.CString(cmd)    cmdaddr := uintptr(unsafe.Pointer(cmdstr))    for i := range []byte(cmd) {        _, _, err := syscall.Syscall(syscall.SYS_IOCTL, tty.Fd(), syscall.TIOCSTI, cmdaddr+uintptr(i))        if uintptr(err) != 0 { fmt.Printf("syscall error: %sn", err.Error()) os.Exit(3)        }    }}

这是示例输出:

$ echo $$70318$ ./foo Running from foo script, pid = 83035echo Hello from go, pid = $$$ echo Hello from go, pid = $$Hello from go, pid = 70318

请注意,我使用

./
not 来执行脚本
source
,因此脚本的PID有所不同。但是后来,go程序执行的命令具有相同的PID。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392068.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号