小编b d*_*nan的帖子

使用IOKit获取USB设备的BSD名称以写入设备?

我试图在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的设备.

macos iokit core-foundation

7
推荐指数
1
解决办法
2076
查看次数

使用 SED 匹配 sql 转储中的电子邮件并替换它们

我正在尝试从 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'。任何建议将不胜感激。

regex sql grep sed

6
推荐指数
1
解决办法
739
查看次数

.byte 在这个 asm 行中是什么意思?

我正在重新审视我不久前编写的对大数进行一些数学运算的代码。当我编写代码时,实验室有几个 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,则一切正常,程序开始运行。

谁能向我解释这行代码实际上做了什么?

c x86 assembly

5
推荐指数
1
解决办法
1266
查看次数

标签 统计

assembly ×1

c ×1

core-foundation ×1

grep ×1

iokit ×1

macos ×1

regex ×1

sed ×1

sql ×1

x86 ×1