gpt4 book ai didi

c++ - 如何将 DeviceIOControl 移植到 ioctl?

转载 作者:行者123 更新时间:2023-11-30 19:48:57 28 4
gpt4 key购买 nike

根据我的理解,DeviceIOControl和ioctl是相同的功能。它们都向硬件发送控制代码并返回响应。为了重用代码,我尝试创建一个能够以跨平台方式工作的函数。因此,我决定使用 DeviceIOControl api,因为它是固定且特定的。问题是:如何将 ioctl 映射到它?

我目前有:

int DeviceIoControl_issueCommand(DeviceHandle handle, int command, void *input, ssize_t sizeof_input, void *output, ssize_t sizeof_output, uint32_t *bytes_written){
#if SYSTEMINFORMATION_ISWINDOWS
int result = DeviceIoControl(handle,command,input,sizeof_input,output,sizeof_output,bytes_written,0);
if (result == 0){
result = -1; //-1 is the new error return
}
return result;
#else
int result = ioctl(handle, command, input); //this doesnt work!
return result;
#endif
}

非常感谢任何帮助!

最佳答案

如果没有DeviceIoControl_issueCommand中的大量内部翻译,您所问的问题是不可能的。函数调用完全不同,需要不同的参数和数据。您可以通过声明 IOControl 类并为您想要支持的每种 IO 功能类型添加成员函数来解决此问题。

class IOControl
{
public:
void DoIoControlX();
void DoIoControlY(int param1, int param2);
};

然后为您需要支持的每个平台提供实现。一种用于 Windows DeviceIOControl 调用,另一种用于支持 ioctl

的系统

关于c++ - 如何将 DeviceIOControl 移植到 ioctl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com