草庐IT

unix - 有没有办法用 Go 复制 tar -h 选项?

在Unix中,tar实用程序有一个-h选项,用于归档链接的目标。我想知道是否有办法用Go做到这一点。现在,当我尝试将标题名称设置为符号链接(symboliclink)文件的链接内容复制到tar时,出现了tar:Damagedtararchive错误。下面的代码是我目前正在使用的。该函数的目标是递归地对当前目录中的所有内容进行压缩。我想也许我所要做的就是将符号链接(symboliclink)的大小设置为目标文件的大小,但仍然出现错误。funccreateTarFile(){tarfile,_:=os.Create(buildCtxTar)defertarfile.Close()tarba

sockets - 转到 Unix 域套接字 : bind address already in use

我有以下服务器代码,它通过unix域套接字进行监听packagemainimport("log""net""os""os/signal""syscall")funcechoServer(cnet.Conn){for{buf:=make([]byte,512)nr,err:=c.Read(buf)iferr!=nil{return}data:=buf[0:nr]println("Servergot:",string(data))_,err=c.Write(data)iferr!=nil{log.Fatal("Writingclienterror:",err)}}}funcmain(){l

go - 为什么使用 unix-compress 和 go compress/lzw 会产生不同的文件,而其他解码器无法读取?

我在终端中使用compressfile.txt压缩了一个文件并得到了(如预期的那样)file.txt.Z当我将该文件传递给Go中的ioutil.ReadFile时,buf0,err:=ioutil.ReadFile("file.txt.Z")我收到错误(上面的行是116):finder_test.go:116:lzw:invalidcode我发现如果我使用compress/lzw包压缩它,Go会接受该文件,我只是使用了awebsite中的代码那样做。我只修改了行outputFile,err:=os.Create("file.txt.lzw")我将.lzw更改为.Z。然后在顶部的Go代码

mysql - 去写 unix/tmp/mysql.sock : broken pipe when sending a lot of requests

我有一个可以进行多个MySQL查询的GoAPI端点。当端点收到少量请求时,它工作得很好。但是,我现在正在使用具有100个请求的apachebench对其进行测试。前100名全部通过。但是,第2个100导致出现这个错误2014/01/1512:08:03http:panicserving127.0.0.1:58602:runtimeerror:invalidmemoryaddressornilpointerdereferencegoroutine973[running]:net/http.func·009()/usr/local/Cellar/go/1.2/libexec/src/pkg

unix - syscall.Stat_t.Dev 映射到什么?

Golang的syscall.Stat_t有一个Dev字段,我假设它标识了磁盘/设备,参见https://golang.org/src/syscall/ztypes_linux_amd64.go?s=1392:1688#L91例如,对于映射到我磁盘上文件的syscall.Stat_t结构,Dev的值为51713;我的问题是:这个ID是Go内部的吗?或者它是否映射到某个操作系统ID(在这种情况下,是哪个操作系统ID,我如何使用标准UnixCLI工具查看它?) 最佳答案 syscall.Stat_t.Dev表示给定文件所在设备的ID。所

sockets - 如果没有 EOF,从 Golang 中的服务器读取 Unix Socket 响应的最佳方法是什么

我想从服务器读取完整的响应,但我不知道它的精确大小。我希望它能工作:message,err:=ioutil.ReadAll(conn)但是服务器没有发送EOF,所以这条语句挂起。我知道它是一个JSON响应,所以我可以读取数据直到最后一个},但这似乎不是完成它的最佳方式。阅读完整回复的最佳做法是什么?更新:一段时间后我发现这样是可行的:varmmap[string]interface{}d:=json.NewDecoder(conn)d.Decode(&m)forkey,value:=rangem{fmt.Print(key)fmt.Print(":")fmt.Print(value)f

unix - 是否可以使用 Go 通过 Unix 域套接字发送和接收文件描述符?

在Unix域套接字的unix(7)手册页中,它说sendmsg可以与SCM_RIGHTS标志一起使用以发送这些套接字上的文件描述符。这在Go中受支持吗?是否有任何好的示例代码展示了它是如何完成的?似乎有一个Msghdrstructure在syscall包中声明。但是没有功能接受它。也许我必须使用原始系统调用接口(interface)? 最佳答案 这里有一个包可以做到这一点:https://github.com/ftrvxmtrx/fd/blob/master/fd.go.然而,这是使用Syscall包来实现的。我不确定是否有办法使用

linux - 我如何了解在 Unix/Linux 上退出 Go 的未知子项?

Go似乎没有办法注册信号处理程序,所以我无法捕获SIGCHLD。那么,我如何了解一个我可能不知道的进程退出,因为我的进程设置了CHILD_SUBREAPER标志或者是PID命名空间中的PID1。 最佳答案 您可以使用signal.Notify注册信号处理程序 关于linux-我如何了解在Unix/Linux上退出Go的未知子项?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/47

unix - 不能使用 '>' 或 '>>' 从 log.Println() 和 log.Printf() 写入文件

我尝试像往常一样为Go项目使用>>>写入文件,它不起作用。./main>>info.log或gorunmain.go>>info.log我以root用户身份运行,我尝试将文件权限更改为755,但仍然在info.log中注明。我也试过ls>>ls.log它工作正常。所以我认为我的代码有问题。我只使用log.Println()和log.Printf()我的代码在Ubuntu12.04.5LTS(GNU/Linux3.13.0-32-genericx86_64)上运行 最佳答案 Go的standardlogger写入标准错误。您应该使用2

go - 如何正确使用 time.Parse 从 Unix 时间字符串创建时间对象?

我们正在尝试将unix时间戳(以字符串形式提供)解析为时间对象,但是,以下操作不起作用:packagemainimport("fmt""time")funcmain(){t,_:=time.Parse(time.UnixDate,"1393344464")fmt.Printf("%v",t)}它不断返回0001-01-0100:00:00+0000UTC。GoPlayground. 最佳答案 首先,你有一个错误并且你没有检查它:http://play.golang.org/p/7ruFfv5QHT这是不好的做法(这些错误有助于调试!