小编Tho*_*ann的帖子

如何在Linux上找到所有串口设备(ttyS,ttyUSB,..)而不打开它们?

获取Linux系统上所有可用串行端口/设备列表的正确方法是什么?

换句话说,当我迭代所有设备时/dev/,如何以经典的方式判断哪些是串行端口,即那些通常支持波特率和RTS/CTS流控制?

解决方案将用C编码.

我问,因为我正在使用第三方库,这显然是错误的:它似乎只是迭代/dev/ttyS*.问题是,例如,USB上的串行端口(由USB-RS232适配器提供),并且这些端口列在/ dev/ttyUSB*下.在Linux.org上阅读Serial-HOWTO,我认为随着时间的推移,还会有其他名称空间.

所以我需要找到检测串行设备的官方方法.问题是似乎没有记录,或者我找不到它.

我想有一种方法是打开所有文件/dev/tty*并调用特定的文件,这些文件ioctl()仅在串行设备上可用.那会是一个很好的解决方案吗?

更新

hrickards建议查看"setserial"的来源.它的代码完全符合我的想法:

首先,它打开一个设备:

fd = open (path, O_RDWR | O_NONBLOCK)
Run Code Online (Sandbox Code Playgroud)

然后它调用:

ioctl (fd, TIOCGSERIAL, &serinfo)
Run Code Online (Sandbox Code Playgroud)

如果该调用没有返回错误,那么它显然是一个串行设备.

我在Serial Programming/termios中找到了类似的代码,建议也添加该O_NOCTTY选项.

但是,这种方法存在一个问题:

当我在BSD Unix(即Mac OS X)上测试此代码时,它也能正常工作.但是,通过蓝牙提供的串行设备会导致系统(驱动程序)尝试连接到蓝牙设备,这需要一段时间才能返回超时错误.这是因为只需打开设备即可.我可以想象在Linux上也会发生类似的事情 - 理想情况下,我不需要打开设备来弄清楚它的类型.我想知道是否还有一种方法可以在ioctl没有打开的情况下调用函数,或者以不会导致连接的方式打开设备?

我该怎么办?

linux serial-port

104
推荐指数
8
解决办法
36万
查看次数

如何隐藏Dock图标

我想隐藏Dock图标并显示一个NSStatusItem.我可以创建StatusItem但我不知道如何从Dock中删除图标.: - /

有任何想法吗?

macos cocoa icons dock lsuielement

61
推荐指数
5
解决办法
3万
查看次数

Xcode,iPhone:如何在编译时检测模拟器目标?

我想知道,在为模拟器构建iPhone应用程序时,是否添加了特殊的DEFINE,允许我有条件地编译这种情况?

如果没有,我将不得不为这种情况添加我自己的目标,但我宁愿采用自动检测方法.

或者,是否有一种动态的方式来了解我的代码何时在模拟器上运行,我的意思是记录了什么?我一直在搜索文档一段时间,但还没有运气.

iphone xcode ios-simulator

22
推荐指数
2
解决办法
9705
查看次数

macOS Sierra上的Python PyQt

如何在OS X Sierra的Mac上使用PyQt 4或5?似乎我必须等待PyQt的新版本,但我不确定这是否真的如此.

python macos pyqt

22
推荐指数
3
解决办法
4万
查看次数

如何使用"defaults write"命令将值添加到嵌套数组或dicts?

考虑一个带有包含数组的dict的首选项plist:

让我们创建它:

defaults write org.my.test '{aDict = {anArray = ();};}'
Run Code Online (Sandbox Code Playgroud)

然后回过头来看看结构更好:

$defaults read org.my.test
{
    aDict = {
        anArray = (
        );
    };
}
Run Code Online (Sandbox Code Playgroud)

现在,如何anArray使用defaults write命令添加值?

我知道有一种-array-add类型可以为数组添加值,但是如何指定数组元素的键路径?

我试过这个,但这不起作用:

defaults write org.my.test aDict.anArray -array-add "a value"
Run Code Online (Sandbox Code Playgroud)

实际上,我需要添加一个非字符串类型,所以我还需要能够指定类型,例如-bool YES.

(注:我不能使用PlistBuddy也不plutil,因为这需要会影响到实际偏好)

macos defaults

17
推荐指数
1
解决办法
3079
查看次数

折旧的NSNibLoading方法的替换(loadNibFile:,loadNibNamed:等)?

我发现NSBundle中的NSNibLoading方法:

+[NSBundle loadNibFile:externalNameTable:withZone:]
+[NSBundle loadNibNamed:owner:]
-[NSBundle loadNibFile:externalNameTable:withZone:]
Run Code Online (Sandbox Code Playgroud)

已经在10.8中被标记为已弃用 - 在10.8及更高版本中加载笔尖的正确方法是什么?

我想在我的应用程序创建一个自定义纸张,我必须创建NSWindowController具有initWithWindowNibName自定义纸张?

macos xcode cocoa objective-c appkit

15
推荐指数
2
解决办法
6445
查看次数

验证GTK应用程序以使用root权限运行

我有一个用于Linux的UI应用程序(使用GTK),需要以root身份运行(它读取和写入/ dev/sd*).

每次启动我的应用程序时,我都不想要用户打开root shell或手动使用"sudo",我想知道该应用程序是否可以使用某些操作系统提供的API来获取root权限.(注意:gtk应用程序不能使用"setuid"模式,因此这里不是一个选项.)

这里的优点是更简单的工作流程:用户可以从他的默认用户帐户双击桌面上的应用程序,而不必打开根终端并从那里启动它.

我问这个是因为OS X提供了这样的:应用程序可以要求操作系统启动具有root权限的可执行文件 - 操作系统(而不是应用程序)然后要求用户输入他的凭据,验证它们然后根据需要启动目标.

我想知道Linux是否有类似的东西(例如Ubuntu)

澄清:

所以,在PolicyKit的提示后,我想知道我是否可以使用它来获得对"/ dev/sd ..."块设备的r/w访问.我觉得这篇文章很难理解,所以我想在我花费数小时试图理解它之前我先问这是否可能.

更新:

该应用程序是一个远程操作的磁盘修复工具,为不称职的Linux用户,这些Linux新手不会太多了解使用sudo甚至更改其用户的组成员身份,特别是如果他们的磁盘刚开始表现,他们吓坏了.这就是为什么我寻求避免像这样的技术性的解决方案.

linux gtk permissions root

12
推荐指数
1
解决办法
4119
查看次数

Sqlite - 在一个语句中使用SELECT或INSERT和SELECT

我试图避免编写单独的SQL查询来实现以下场景:

我有一个名为Values的表:

价值观:

id INT (PK)
data TEXT
Run Code Online (Sandbox Code Playgroud)

我想检查表中是否存在某些数据,如果存在,则返回其id,否则插入并返回其id.

(非常)天真的方式是:

select id from Values where data = "SOME_DATA";
Run Code Online (Sandbox Code Playgroud)

如果id不为null,请接受它.如果id为null则为:

insert into Values(data) values("SOME_DATA");
Run Code Online (Sandbox Code Playgroud)

然后再次选择它以查看其ID或使用返回的ID.

我试图在一行中使上述功能.我想我已经接近了,但我还没能做到:到目前为止我得到了这个:

select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));
Run Code Online (Sandbox Code Playgroud)

我试图利用第二个选择将返回null然后返回COALESCE的第二个参数这一事实.到目前为止没有成功.我错过了什么?

sql sqlite

12
推荐指数
1
解决办法
5266
查看次数

iPhone UIWebView:loadData不适用于某些类型(Excel,MSWord,PPT,RTF)

我的任务是在OS 3.x的iPhone上显示支持的文档类型,例如.pdf,.rtf,.doc,.ppt,.png,.tiff等.

现在,我已将这些文件仅加密存储在磁盘上.出于安全考虑,我希望避免将它们以未加密的方式存储在磁盘上.

因此,我更喜欢使用loadData:MIMEType:textEncodingName:baseURL:而不是loadRequest:显示文档,因为loadData允许我传递NSData对象中的内容,即我可以在内存中解密文件而不需要将其存储在磁盘上,因为在使用时需要它loadRequest.

问题是loadData似乎不适用于所有文件类型:

测试显示所有图片类型似乎都可以正常工作,而PDF则更好,而更复杂的类型则不然.我得到一个错误,如:

NSURLErrorDomain Code=100
NSURLErrorDomain Code=102
Run Code Online (Sandbox Code Playgroud)

WebView似乎需要一个真正有效的URL来访问文档作为文件,尽管我已经通过NSData对象提供了所有内容.

这是我用来显示内容的代码:

[webView loadData:data MIMEType:type textEncodingName:@"utf-8" baseURL:nil];
Run Code Online (Sandbox Code Playgroud)

mime-type被正确设置,例如为.doc文件的"application/msword".

有谁知道如何loadData使用loadRequest支持的所有类型?或者,是有一些方法可以让我知道哪些类型做的工作是肯定的(即由苹果官方认可)与loadData?然后我可以双重工作,只为loadData不喜欢的情况创建一个临时未加密的文件.

更新

看起来我不是第一个碰到这个的人.看这里:

http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00216.html

所以,我猜,这是现状,我无能为力.

有人提出了可能有效的解决办法:

http://osdir.com/ml/iPhoneSDKDevelopment/2010-03/msg00219.html

基本上,我们的想法是提供一个服务于文件的小型http服务器(在我的情况下来自内存),然后使用loadRequest.这可能是内存密集型的,因为服务器和webview可能都将内存中的全部内容保存为两个副本,而不是使用loadData,两者都希望共享相同的数据对象.(请注意,我必须将解密数据保存在内存中,这就是重点).

iphone webkit uiwebview

11
推荐指数
1
解决办法
9168
查看次数

使用 Shift 键扩展 NSCollectionView 中的选择

我最近审查了我一年前发布的一个应用程序。而且我看到现在NSCollectionView它的内部已经失去了选择功能,例如 SHIFT + Select 现在它表现为 CMD + Select。

(第二个问题:用鼠标拖动时我也没有得到选择矩形。)

显然我想要这个功能回来,使用 shift 会将选择从先前单击的单元格扩展到 shift 单击的单元格。

我做了什么:

//NSCollectionView * _picturesGridView; //is my iVar

//In initialization I have set my _picturesGridView as follows
//Initializations etc are omitted -- (only the selection related code is here)
[_picturesGridView setSelectable:YES];
[_picturesGridView setAllowsMultipleSelection:YES];
Run Code Online (Sandbox Code Playgroud)

问题:是否有一种简单的方法可以恢复此功能?我在文档中没有看到任何相关的内容,并且在互联网上找不到任何解决方案。

子问题:如果没有简单的方法来实现这一点 -> 我应该继续创建自己的FancyPrefix##CollectionViewClass功能并按照我的意愿重新实现这个功能 - 还是最好跳过现有的NSCollectionView并强制它按照我的意愿行事?

子注:好吧,如果我发现自己重新实现它,它将是一个轻量级的类,它只会满足我自己的需求——我的意思是我不会模仿整个NSCollectionView类。

PS 我可以通过单击来选择一个项目我只能使用 CMD+Click 或 SHIFT+Click 来选择多个项目,但后者的行为与我不想要的 CMD+Click 完全一样。

至于鼠标选择矩形 - 我没有覆盖任何鼠标事件。不清楚为什么我没有这个功能。

macos cocoa objective-c nscollectionview swift

11
推荐指数
1
解决办法
902
查看次数