当前位置:  技术问答>linux和unix

如果在linux中访问i/o端口?

    来源: 互联网  发布时间:2016-03-04

    本文导语:  以及如何访问物理内存,有没有现成的驱动以及应用程序接口,象windows中的winio驱动一样。急! | 从用户空间的 I/O 存取 可从用户空间使用, 至少在 PC-类 的计算机. GNU C 库在  中定义它...

以及如何访问物理内存,有没有现成的驱动以及应用程序接口,象windows中的winio驱动一样。急!

|
从用户空间的 I/O 存取
可从用户空间使用, 至少在 PC-类 的计算机. GNU C 库在  中定义它们. 
下列条件应当应用来对于 inb 及其友在用户空间代码中使用:
程序必须使用 -O 选项编译来强制扩展内联函数.

ioperm 和 iopl 系统调用必须用来获得权限来进行对端口的 I/O 操作. ioperm 为单独端口获取许可, 而 iopl 为整个 I/O 空间获取许可.这 2 个函数都是 x86 特有的.
程序必须作为 root 来调用 ioperm 或者 iopl.[34] 可选地, 一个它的祖先必须已赢得作为 root 运行的端口权限.
如果主机平台没有 ioperm 和 iopl 系统调用, 用户空间仍然可以存取 I/O 端口, 通过使用 /dev/prot 设备文件. 注意, 但是, 这个文件的含义是非常平台特定的, 并且对任何东西除了 PC 不可能有用.

例子源码 misc-progs/inp.c 和 misc-progs/outp.c 是一个从命令行读写端口的小工具, 在用户空间. 它们希望被安装在多个名子下
(例如, inb, inw, 和 inl 并且操作字节, 字, 或者长端口依赖于用户调用哪个名子). 
它们使用 ioperm 或者 iopl 在 x86下, 在其他平台是 /dev/port.

程序可以做成 setuid root, 如果你想过危险生活并且在不要求明确的权限的情况下使用你的硬件. 
但是, 请不要在产品系统上以 set-uid 安装它们; 它们是设计上的安全漏洞.


/* 
 * inp.c -- read all the ports specified in hex on the command line.
 *     The program uses the faster ioperm/iopl calls on x86, /dev/port
 *     on other platforms. The program acts as inb/inw/inl according
 *     to its own name
 *
 * Copyright (C) 1998,2000,2001 Alessandro Rubini
 * 
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include  /* linux-specific */

#ifdef __GLIBC__
#  include 
#endif

#define PORT_FILE "/dev/port"

char *prgname;

#ifdef __i386__
static int read_and_print_one(unsigned int port,int size)
{
    static int iopldone = 0;

    if (port > 1024) {
if (!iopldone && iopl(3)) {
    fprintf(stderr, "%s: iopl(): %sn", prgname, strerror(errno));
    return 1;
}
iopldone++;
    } else if (ioperm(port,size,1)) {
fprintf(stderr, "%s: ioperm(%x): %sn", prgname,
port, strerror(errno));
return 1;
    }

    if (size == 4)
printf("%04x: %08xn", port, inl(port));
    else if (size == 2)
printf("%04x: %04xn", port, inw(port));
    else
printf("%04x: %02xn", port, inb(port));
    return 0;
}
#else /* not i386 */

static int read_and_print_one(unsigned int port,int size)
{
    static int fd = -1;
    unsigned char b; unsigned short w; unsigned int l;

    if (fd 

    
 
 

您可能感兴趣的文章:

  • Linux下的80端口被apache的服务占了,如何才能是80端口默认访问的是tomcat?
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • linux中端口不能访问,我该怎么消除限制让它可以访问所有端口
  • 怎么知道自己的redhat linux 的端口是否已经开放,比如我想看看80和21端口是否开放?
  • linux下如何监听自定义端口?包括端口状态和数据
  • 我要在LINUX(REDHAT)下安装邮件系统,但是提示我SMTP端口和POP3端口正在使用中,该如何?
  • 请问:我正在编linux下的openssl程序,它是要用443号端口的,调试时却不通,应是linux系统占用了该端口,我怎可停了它以作我用,或停了系统的op
  • 如何配置linux可以让普通用户使用80端口或1024以下的端口?
  • linux 如何让端口一直处于打开状态 比如 nc -lp 12000& 打开12000端口 可是马上就关闭了 现在可有办法让其一直处于打开状态
  • redhat linux7.3怎么查端口是否已被系统使用啊?? 我正要用ssl的一个代理模块stunnel-4.03,它默认要用443号端口,客户机连接不能通,但改成
  • LINUX 访问网页不要端口
  • linux 下 java应用程序开不了3000端口监听 ?
  • 在linux下能实现多端口映射吗?
  • linux端口问题求教
  • linux 80端口不能用(急)
  • linux打开udp端口
  • Linux下普通用户为何无法使用2000以下端口?
  • Red Hat Linux9上如何查询和设置端口状态?
  • 请问如何在linux下关闭一个正在监听的端口?
  • mysql iis7站长之家
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • 在linux下,如何访问另一台linux主机?如何访问windows主机?
  • 高手求救,在windows下访问linux服务器时使用如\192.168.100.1,但是访问失败,问在linux上要怎么设置啊
  • 域内共享的问题?Linux机器可以访问Window机器,但是Window机器不能访问Linux机器?
  • 其他机无法访问linux下tomcat,本机可以访问,其他机可PING到linux的IP,防火墙都已禁用?
  • 配置samba,2000可以访问linux,但是linux不能访问2000的共享目录
  • 我的机器装了WINDOWS2000 和 LINUX 7.3 , 请问在LINUX 中如何访问`WIN2K中的文件?同样在WIN2K中如何访问LINUX 中的文件?
  • 从其它电脑访问linux下的apache,有的可以访问,有的却访问不了,请问是什么原因,ping都能ping通的
  • linux中只能让用户访问自己的目录 不能访问其他用户的目录
  • linux下能访问ms vfp 的dbf格式的数据库吗。怎么访问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux c下利用srand和rand函数生成随机字符串
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?
  • Linux下chmod命令详细介绍及用法举例
  • Windows2000和Linux双操作系统,Linux系统有问题,我直接把Linux分区删除后,Windows2000进不去了,怎么办???


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3