我试图在MacOS下使用IOKit确定虚拟串口的BSD名称.
我有一个看起来像虚拟串口的USB CDC设备,我想得到BSD设备路径,这样我就可以做一个fopen("/ dev/tty.usbmodem123").我有一个程序,它接受VID和PID并等待插入设备,然后我想使用BSD名称写入设备.设备在每个系统上的安装方式不同,我试图将其用作教学工具,因此我需要在写入设备之前先搜索设备,而无需手动检查/dev/tty.*设备的安装位置.
我有3个问题.
首先,可以使用CFSTR(kIOBSDNameKey)?获取虚拟串口的BSD名称吗?
IORegistryEntrySearchCFProperty()并FindProp()始终返回"null".有谁知道非块设备是否可以返回BSD名称?我目前正在这样做:
bsdName = IORegistryEntrySearchCFProperty(p_usb_ref, kIOServicePlane, CFSTR(kIOBSDNameKey), kCFAllocatorDefault, kIORegistryIterateRecursively );
其次,我已经能够得到服务平面名称:IOService:/ AppleACPIPlatformExpert/PCI0 @ 0/AppleACPIPCI/OHC1 @ 4/AppleUSBOHCI /简介电子@ 4100000,这对应于一个挂载点:/dev/tty.usbmodem411有谁知道如何将服务平面名称转换为开发树名称?
第三,我是不是太复杂了?我已经知道设备io处理了,有没有办法用它来向设备写入数据?我只需要发送一些ASCII字节来闪存一些LED.
任何建议将不胜感激.
EDIT:
花了一些时间看这个之后,我发现我的问题是我在加载CDC驱动程序之前查询了BSD名称.我目前正在获取BSD名称,然后整理出VID和PID.
解决上述问题的代码是:
matchingDictionary = IOServiceMatching(kIOSerialBSDServiceValue);
CFDictionarySetValue(matchingDictionary, CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDModemType));
kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &iter);
Run Code Online (Sandbox Code Playgroud)
然后迭代iter查找具有正确ID的设备.
我正在尝试从 SQL 转储文件中清除电子邮件,我可以使用一些建议。我这样做是因为我想向一些开发人员发送“大部分是正确的”信息,而不共享实际的用户信息。我有一个逐行循环的 BASH 脚本,所以我试图对 INSERT 语句进行 SED 替换。我需要遍历愚蠢的东西,因为我还有一些其他的擦洗东西,这是有效的。我有一些有效的正则表达式(我认为),但我似乎无法将其放入 SED。正则表达式:
'(.*@.*?)'
Run Code Online (Sandbox Code Playgroud)
将匹配“emailname@emaildomain.com”,但我无法将其放入 SED,而且我确信有更好的 REGEX。这是我的示例行。
'firstname','emailname@emaildomain.com','lastname'
Run Code Online (Sandbox Code Playgroud)
我希望能够在引号之间有 @ 时替换为 'empty@invalid'。任何建议将不胜感激。
我正在重新审视我不久前编写的对大数进行一些数学运算的代码。当我编写代码时,实验室有几个 x86,它们分为 32 位和 64 位。我的工作是在 UltraSPARC 上,我依稀记得从 Intel 手册中提取了这行代码,以确保该代码在 64 位 CPU 上使用。
unsigned long x[4];
x[0] = 0;
x[1] = 0;
x[2] = 0;
x[3] = 0;
asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) );
Run Code Online (Sandbox Code Playgroud)
如果 x[0] 为 0,则一切正常,程序开始运行。
谁能向我解释这行代码实际上做了什么?