快速业务通道

从Windows 向Linux 迁移设备控制应用程序

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-07
统调用

设备控制的主系统调用包括下列操作:打开、关闭、I/O 控制、读/写等.参见表 2 所示的 Windows/Linux 映射.

表 2. 设备控制函数的映射

Windows Linux
CreateFile open
CloseHandle close
DeviceIoControl ioctl
ReadFile read
WriteFile write

现在,我们深入探讨三个最常用的函数:create、close 和 devioctl.

Windows 的设备打开和关闭

我们讨论 Windows 函数 CreateFile 和 CloseHandle.函数 CreateFile 用于打开设备.该函数返回句柄,用以访问清单 1 所示的对象.

清单 1. Windows 的 CreateFile 函数

HANDLE CreateFile (LPCTSTR lpFileName, //File name of the device
(Device Pathname)
DWORD dwDesiredAccess, //Access mode to the object (read, write,
or both)
DWORD dwShareMode, //Sharing mode of the object (read,
write, both or none)
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //Security attribute determining whether
the returned handle can be inherited by
child processes
DWORD dwCreationDisposition, //Action taken on files that exist and
do not exist
DWORD dwFlagsAndAttributes, //File attributes and flags
HANDLE hTemplateFile); //A handle to a template file

参数 lpFileName 是前面讲过的设备路径名.通常,打开设备需要将 dwDesiredAccess 设置为 0 或 GENERIC_READ|GENERIC_WRITE,将 dwShareMode 设置为 FILE_SHARE_READ|FILE_SHARE_WRITE,将 dwCreationDisposition 设置为 OPEN_EXISTING,以及将 dwFlagsAndAttributes 和 hTemplateFile 设置为 0 或 NULL.返回句柄将用于后续设备控制操作. 拥有帝国一切,皆有可能。欢迎访问phome.net

关闭设备使用函数 CloseHandle.将参数 hObject 设置为设备打开时返回的句柄:BOOL WINAPI CloseHandle (HANDLE hObject);.

Linux 的设备打开和关闭

在 Linux 中,我们讨论的是函数 open 和 close. 如前所述,打开设备就像打开普通文件一样.清单 2 显示如何使用 open 获取设备句柄.

清单 2. Linux 的 open 函数

清单 2. Linux 的 open 函数
                

int open (const char *pathname,

       int flags, 

       mode_t mode);

调用成功将返回文件描述符,它是进程尚未打开的序号最小的文件描述符.如果调用失败,将返回 -1.文件描述符用作设备句柄.

参数标志包含 O_RDONLY、O_WRONLY 或 O_RDWR 的其中之一.其他标志可选.参数模式在新文件创立时说明文件访问权.

在 Linux 中,函数 close 关闭设备就像关闭文件一样:int close(int fd);.

Windows 的 DeviceIoControl

设备控制(Windows 的 DeviceIoControl 和 Linux 的 ioctl)是最常用的设备控制函数,可以完成设备访问、信息获取、命令发送和数据交换等任务.清单 3 举例说明了 DeviceIoControl:

清单 3. Windows 的 DeviceIoControl 函数

BOOL DeviceIoControl (HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped);

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号