首页 > 其他分享 >get_current_tty 使用

get_current_tty 使用

时间:2024-07-29 16:30:56浏览次数:14  
标签:tty get 打印 current 终端 当前

get_current_tty 使用

我的博客

在开发内核驱动时,可以使用 get_current_tty 接口获取当前所在的终端,将日志打印到当前终端窗口中。比如,如果我们是通过 SSH 连接到 SSH 服务器上,通过 printk 等内核打印方式打印的日志内容会存储到系统日志中,通过 dmesg 可以查看,不会像用户态程序中库函数 printf 一般将结果打印到当前终端窗口中。此时可以使用 get_current_tty 这一接口获取当前终端,将消息打印到当前终端窗口中。

使用方式如下:

/* #include <linux/tty.h> */
static struct tty_struct *tty;
unsigned char *newLine = "\r\n";
unsigned char *errInfo = "Error: a test error.\r\n";

tty = get_current_tty();

if (tty) {
    (tty->driver->ops->write)(tty, newLine, strlen(newLine));
    (tty->driver->ops->write)(tty, errInfo, strlen(errInfo));
} else {
    printk(KERN_ERR "Get current tty failed\n");
}

需要注意的是,能够使用这个方式打印消息的前提是,驱动进程是由当前终端窗口发起的。如果驱动中使用了工作队列,比如延迟十毫秒启动一个工作线程,那么在这样的线程中调用这个接口将不能够将信息打印到当前控制台上。原因在于,工作队列启动的线程不是由当前终端创建,而是由内核调度创造。

标签:tty,get,打印,current,终端,当前
From: https://www.cnblogs.com/arvin-blog/p/18330378

相关文章

  • InputStream inputStream = classLoader.getResourceAsStream("aaa.properties") ; 
    问:InputStreaminputStream=classLoader.getResourceAsStream("aaa.properties"); 获取到的 inputStream 是null答:当您尝试使用ClassLoader的getResourceAsStream方法来获取一个资源文件(如"aaa.properties")的InputStream,但得到的结果是null时,这通常意味着资源文......
  • 与家电大咖面对面,这几项关键半导体技术轻松get!
       导语CAEE携手Big-Bit,合肥家电产业链有福了!为促进中国家电行业科技创新,提高家电行业核心竞争力,助力中国家电行业可持续高质量发展,CAEE中国国际家电制造业供应链展览会暨全国家电零部件、技术、材料、生产设备展览会将于9月6日-7日在安徽合肥举办。本次展会作为全球......
  • ipywidgets 容器小部件中的 PIL 图像
    我有一些来自某个图书馆的PIL图像,并尝试了解它发生了什么。为此,我计算一些值,调用库并查找图片。我对计算值感兴趣。我使用带有一些滑块的jupyter笔记本与库进行交互。这是我的代码的一个非常简短的示例:fromPILimportImage,ImageDrawimportipywidgets......
  • vuex核心概念---action、getter、module
    在vuex中还有其他三个概念,分别是action、getter、moduler,其实这三个概念多多少少大大小小都大同小异,接下来分别解释。1.action前面提到在mutation是用作同步传递数据的,那么异步用谁呢?答案是action。为了方便devtools打个快照存下来,方便管理维护。所以说这个只是规范,而不是逻辑......
  • 使用 Axios HTTP 客户端通过 GET 请求调用 FastAPI 后端时收到 422 错误响应
    我正在尝试从我的Vue3客户端(使用GETJavaScriptHTTP客户端)向FastAPI服务器发出axios请求,但我收到422unprocessableentity错误响应。据我了解,这种错误消息与错误的输入有关。这是vue3代码:import{authToken}from"../main.js"expo......
  • C++中 cin、cin.get()、cin.getline()、getline() 的区别
    cin我们先介绍c++中最常用的输入流对象cin我们常用 cin>>num 来从缓冲区中读取数据到 num 中,num 的变量类型可以是多种类型,最常用的有 int、string、char、double、float等等voidcin_test(){std::cout<<"-----------cintest---------"<<std::endl;st......
  • 可靠地获取当前进程的TargetData
    在llvmlite中,需要TargetData的实例来获取对象的ABI大小。这是有道理的,因为对象的大小取决于字的大小和对齐方式。如果我想立即编译并使用当前进程中的代码,那么除了当前进程的目标数据之外,我不需要任何其他东西。文档似乎表明这将可靠地获取当前进程的目标数据。import......
  • 如何在事件wxWidgets中传递自定义数据
    情况我目前正在使用wxPython(wxWidgetsforPython)编写一个应用程序。在此应用程序中显示了一个对话列表,每行末尾都有一个“打开对话”按钮。我们将此窗口称为“所有对话”。单击任何一个按钮都会调用函数“open_conversation(self,event)”,该函数会显示完整的对话。......
  • pytube.exceptions.RegexMatchError:get_throtdling_function_name:找不到多个匹配
    我曾经通过以下方式下载歌曲:frompytubeimportYouTubevideo=YouTube('https://www.youtube.com/watch?v=AWXvSBHB210')video.streams.get_by_itag(251).download()从今天开始出现此错误:Traceback(mostrecentcalllast):File"C:\Users\Me\AppData\Local\P......
  • ConcurrentHashMap
    ConcurrentHashMap是Java并发包(java.util.concurrent)中的一种线程安全的哈希表实现。HashMap在多线程环境下扩容会出现CPU接近100%的情况,因为HashMap并不是线程安全的,我们可以通过Collections的Map<K,V>synchronizedMap(Map<K,V>m)将HashMap包装成一个线程安......