3
A
回答
3
的CGO编译器目前还不能处理的交流功能变量参数和宏在C头文件,所以你不能做一个简单的
// #include <sys/ioctl.h>
// typedef struct ttysize ttysize;
import "C"
func GetWinSz() {
var ts C.ttysize;
C.ioctl(0,C.TIOCGWINSZ,&ts)
}
要解决的宏,使用恒定的,所以
// #include <sys/ioctl.h>
// typedef struct ttysize ttysize;
import "C"
const TIOCGWINSZ C.ulong = 0x5413; // Value from Jed Smith's answer
func GetWinSz() {
var ts C.ttysize;
C.ioctl(0,TIOCGWINSZ,&ts)
}
但是cgo仍然会在ioctl的原型上...你最好的选择将是包装的ioctl交流功能服用参数的具体数量和链接,在作为一个黑客,你可以做的是,在上述意见进口“C”
// #include <sys/ioctl.h>
// typedef struct ttysize ttysize;
// void myioctl(int i, unsigned long l, ttysize * t){ioctl(i,l,t);}
import "C"
const TIOCGWINSZ C.ulong = 0x5413; // Value from Jed Smith's answer
func GetWinSz() {
var ts C.ttysize;
C.myioctl(0,TIOCGWINSZ,&ts)
}
我没有测试此,但类似的东西应该工作。
0
它看起来并不像很多工作已经在此从文档的偶然一瞥尚未完成 - 实际上,我根本找不到ioctl
。
有了这种早期的语言,可以肯定地说,你踩着未铺设的地面。 TIOCGWINSZ
,本身就是一个恒定的整数(我发现它在Linux源代码值):
#define TIOCGWINSZ 0x5413
祝你好运,虽然。
1
这样做的最好方法是使用syscall包。因为它只是做很多不同的东西的系统调用包没有定义的ioctl函数,但你仍然可以这样调用:
syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(TIOCGWINSZ), uintptr(unsafe.Pointer(&ts)))
留下的两件事情是复制winsize结构和不断需要。这个工具是godefs,它将通过查看C头文件中的结构和常量来生成.go源文件。创建一个termios.c文件看起来像这样:
#include <termios.h>
enum {
$TIOCGWINSZ = TIOCGWINSZ
};
typedef winsize $winsize;
现在运行
godefs -gpackagename termios.c > termios.go
现在你应该有你需要得到终端大小的一切。设置大小与为termios.c添加另一个常量一样简单。
1
读:http://www.darkcoding.net/software/pretty-command-line-console-output-on-unix-in-python-and-go-lang/
const (
TIOCGWINSZ = 0x5413
TIOCGWINSZ_OSX = 1074295912
)
type window struct {
Row uint16
Col uint16
Xpixel uint16
Ypixel uint16
}
func terminalWidth() (int, error) {
w := new(window)
tio := syscall.TIOCGWINSZ
if runtime.GOOS == "darwin" {
tio = TIOCGWINSZ_OSX
}
res, _, err := syscall.Syscall(syscall.SYS_IOCTL,
uintptr(syscall.Stdin),
uintptr(tio),
uintptr(unsafe.Pointer(w)),
)
if int(res) == -1 {
return 0, err
}
return int(w.Col), nil
}
相关问题
- 1. 如何通过终端设置Chromium的窗口大小?
- 2. 如何在使用pexpect时明确设置终端大小
- 3. ncurses终端大小
- 4. 设置另一个进程的终端大小(ala`stty columns`)?
- 5. 在linux终端中获取光标位置和终端大小
- 6. 如何设置JPanel大小?
- 7. 如何设置UICollectionViewCell大小
- 8. 如何设置CustomView大小?
- 9. 如何设置JDesktopPane大小
- 10. 如何通过终端设置Magento 2配置设置?
- 11. “设置 - ”命令,在终端
- 12. 如何设置char []的大小int
- 13. 如何设置JInternalFrame的大小
- 14. 如何设置微调器的大小
- 15. 如何设置表单框的大小?
- 16. 如何设置图像的大小?
- 17. 如何设置散点图的大小
- 18. 如何设置JFace ListViewer的大小?
- 19. 如何设置html.EditorFor helper的大小?
- 20. 如何设置UITextView的字体大小?
- 21. 如何设置TreeViewer的初始大小?
- 22. 如何设置AutoCompleteTextView结果的大小?
- 23. 如何设置项目的大小UIStackView
- 24. 如何设置html.TextBox助手的大小?
- 25. 如何设置selectOneMenu框的大小
- 26. 如何设置AVAssetImageGenerator的大小?
- 27. 如何设置按钮的大小?
- 28. 如何设置原型的大小UICollectionViewCell
- 29. 如何设置NSScrollView的内容大小?
- 30. 如何设置css-content-image的大小?