我的编程空间,编程开发者的网络收藏夹
学习永远不晚

封装 Linux 系统调用中的 inb() 和 outb() 函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

封装 Linux 系统调用中的 inb() 和 outb() 函数

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《封装 Linux 系统调用中的 inb() 和 outb() 函数》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

以下 linux 系统调用是否有 go 包装器用于低级端口输入输出?

#include <sys/io.h>

unsigned char inb(unsigned short int port);
void outb(unsigned char value, unsigned short int port);

我只找到了姐妹调用的包装:

int ioperm(unsigned long from, unsigned long num, int turn_on);

设置对上述端口的访问。包装器位于 syscall go 包中:

func Ioperm(from int, num int, on int) (err error)

但没有inb()outb()的痕迹。我不想使用 cgo 进行此调用,以免丢失简单的交叉编译。


解决方案


inboutb 不是系统调用,它们是处理器指令。您可以用 c 语言为这些函数编写包装函数,并使用 cgo 调用它们。

以下是 c 函数(除非您在 sys/io.h 中提供了它们):

unsigned char inb(unsigned short port)
{
    unsigned char ret;
    asm volatile("in %%dx, %%al" : "=a"(ret) : "d"(port) : "memory");
    return ret;
}

void outb(unsigned char value, unsigned short port)
{
    asm volatile("out %%al, %%dx" : : "a"(value), "d"(port) : "memory");
}

还有一个可以与 cgo 一起使用的小头文件:

#ifndef IOPORT_H_
#define IOPORT_H_ 1

unsigned char inb(unsigned short port);
void outb(unsigned char value, unsigned short port);

#endif

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

封装 Linux 系统调用中的 inb() 和 outb() 函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

封装 Linux 系统调用中的 inb() 和 outb() 函数

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《封装 Linux 系统调用中的 inb() 和 outb() 函数》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮
封装 Linux 系统调用中的 inb() 和 outb() 函数
2024-04-04

matlab函数封装和调用的方法是什么

在Matlab中,可以通过创建函数文件来封装函数,并通过函数名调用函数。以下是具体的方法:1. 打开Matlab编辑器,选择新建函数文件。在弹出的对话框中输入函数名和保存路径。2. 在编辑器中编写函数代码。函数代码包括输入参数、输出参数和函
2023-10-08

linux中Cobbler系统的安装和使用

这篇文章主要介绍“linux中Cobbler系统的安装和使用”,在日常操作中,相信很多人在linux中Cobbler系统的安装和使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中Cobbler系统
2023-06-13

linux调用系统内核函数的方法是什么

在Linux中,调用系统内核函数的方法主要有以下几种:1. 使用系统调用(system call):系统调用是用户程序通过软中断(软中断号为0x80)请求操作系统内核提供的服务。用户程序通过执行int 0x80指令触发软中断,将要调用的系统
2023-10-18

Linux exit函数与进程退出时系统调用的关系

在 Linux 系统中,当一个程序运行结束或者需要终止时,会涉及到进程的退出主动退出:程序正常运行结束或者遇到错误需要退出时,可以使用 exit() 函数来主动退出。exit() 函数是一个库函数,它会完成一些清理工作,如关闭打开的文件描述
Linux exit函数与进程退出时系统调用的关系
2024-08-30

Linux系统中nslookup和dig的安装及使用

这篇文章主要讲解了“Linux系统中nslookup和dig的安装及使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中nslookup和dig的安装及使用”吧!Fedora
2023-06-05

C++ 函数在分布式系统中的并行调用方案?

在分布式系统中并行调用c++++函数有三种方案:使用线程、使用c++11线程池、使用第三方库。其中线程池提供了更高级的功能和性能,可用于处理图像、科学计算等实际案例,显著提高算法性能。C++ 函数在分布式系统中的并行调用方案分布式系统中经
C++ 函数在分布式系统中的并行调用方案?
2024-04-26

exit函数在Linux系统编程中的实践应用

在Linux系统编程中,exit函数是一个重要的函数,它用于终止进程的执行并返回指定的状态码正常退出:当程序完成其任务并准备退出时,可以使用exit(0)来表示正常退出。这里的0表示程序成功执行并结束。#include#
exit函数在Linux系统编程中的实践应用
2024-09-10

Linux系统中fork函数的具体使用方法是什么

本篇文章为大家展示了Linux系统中fork函数的具体使用方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、fork 入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通
2023-06-28

函数指针和闭包在分布式系统中的使用

函数指针和闭包在分布式系统中拥有广泛的应用,它们分别支持运行时的动态函数调用和跨线程/进程的数据共享。在分布式任务处理中,函数指针可用于任务调度,闭包可用于任务执行,提升系统的灵活性与效率。函数指针和闭包在分布式系统中的使用函数指针和闭包
函数指针和闭包在分布式系统中的使用
2024-04-16

在Linux中安装和使用系统性能监控软件Nmon的方法

本篇内容介绍了“在Linux中安装和使用系统性能监控软件Nmon的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Nmon(得名于 Nig
2023-06-12

Linux中获取某个进程的系统调用以及参数(故障排查案例)

当一个程序发生故障时,有时候想通过了解该进程正在执行的系统调用来排查问题。通常可以用 strace 来跟踪。但是当进程已经处于 D 状态(uninterruptible sleep)时,strace 也帮不上忙。这时候可以通过 cat /p
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录