在 Linux 下运行的 Julia 程序中,我需要在调整控制台窗口大小时启动一个专用操作。那么在 Julia 中,我如何拦截系统信号 SIGWINCH(窗口大小调整)并将其附加到一个执行所需操作的函数上?
在 Ada 中,声明它相当简单:
protected Signalhandler is
procedure Handlewindowresizing;
pragma Attach_Handler (Handlewindowresizing, SIGWINCH);
end Signalhandler;
Run Code Online (Sandbox Code Playgroud)
基于 SCHEMER 思想的暂定解决方案:我尝试使用 C 库进行 SIGWINCH 中断监视。
我的图书馆.h
void Winresize (void Sig_Handler());
Run Code Online (Sandbox Code Playgroud)
我的图书馆
#include "myLibrary.h"
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void Winresize(void sig_handler (void)) {
signal(SIGWINCH, sig_handler);
}
Run Code Online (Sandbox Code Playgroud)
编译和库准备
gcc -c -Wall -fPIC myLibrary.c
gcc -shared -fPIC -o myLibrary.so myLibrary.o
使用 C-Library 的 Julia 程序:
function getc1()
ret = ccall(:jl_tty_set_mode, Int32, (Ptr{Cvoid},Int32), stdin.handle, true)
ret == 0 …Run Code Online (Sandbox Code Playgroud) 系统命令 'stty size' 返回两个整数,它们给出了当前终端的维度。Julia 如何执行此命令并在两个整数变量中返回输出。