作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试对FreeBSD的jail_set进行系统调用,但没有成功。
收到系统调用时,它使用iovec数组,但始终返回“错误地址”。
这是创建IOVEC的代码部分:
func (p Params) buildIovec() ([]unix.Iovec, error) {
iovSize := len(p) * 2
iovec := make([]unix.Iovec, iovSize)
var itr int
for paramKey, paramValue := range p {
arrayParamKey := []byte(paramKey)
// Adds a nullbyte
// Jail parameters are passed as an array
// of name-value pairs in the array iov, containing niov
// elements. Parameter names are a null-terminated
// string, and values may be strings, integers,
// or other arbitrary data.
// Ref: https://www.freebsd.org/cgi/man.cgi?query=jail&sektion=3&manpath=FreeBSD+11.1-stable
arrayParamKey = append(arrayParamKey, 0)
size := len(arrayParamKey)
iovec[itr] = unix.Iovec{
Base: (*byte)(unsafe.Pointer(&arrayParamKey)),
Len: uint64(size),
}
itr++
rv := reflect.ValueOf(paramValue)
var arrayValueBytes []byte
switch rv.Kind() {
case reflect.String:
arrayValueBytes = []byte(rv.String())
arrayValueBytes = append(arrayValueBytes, 0)
if err != nil {
return nil, err
}
default:
return nil, errors.New("invalid value passed in for key: " + paramKey)
}
arrayValueSize := len(arrayValueBytes)
iovec[itr] = unix.Iovec{
Base: (*byte)(unsafe.Pointer(&arrayValueBytes)),
Len: uint64(arrayValueSize),
}
itr++
}
return iovec, nil
}
然后使用以下命令调用syscall:
_, _, e1 := unix.Syscall(uintptr(call), uintptr(unsafe.Pointer(&iov)), uintptr(len(iov)), flags)
其中call表示jail_set int
507,并且flags的uintptr为1(表示CREATE)。
最佳答案
您的值传递的是 byte slice 的片头的地址,而不是实际字节开始的地址。[]byte(rv.String())
将创建一个小 slice header 。unsafe.Pointer(C.CString(rv.String()))
可能会使您更接近有效的代码。
关于go - Go,FreeBSD,iovec和syscalls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65209964/
我正在尝试找出我的 Swift 3 应用程序的问题,该应用程序应该使用 JustHTTP 将 Assets 数据从 iDevice 发送到网络服务器。框架。 我提出了一个不同的 SO 问题,它提出了一
我在我的驱动程序中添加了对 AIO 的支持(内核态中的 .aio_read 、 .aio_write 调用,用户态中的 libaio )并查看了各种来源,但我找不到如果在我的 aio_read、.ai
我是一名优秀的程序员,十分优秀!