获取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
没有打开的情况下调用函数,或者以不会导致连接的方式打开设备?
我该怎么办?
我想隐藏Dock图标并显示一个NSStatusItem
.我可以创建StatusItem但我不知道如何从Dock中删除图标.: - /
有任何想法吗?
我想知道,在为模拟器构建iPhone应用程序时,是否添加了特殊的DEFINE,允许我有条件地编译这种情况?
如果没有,我将不得不为这种情况添加我自己的目标,但我宁愿采用自动检测方法.
或者,是否有一种动态的方式来了解我的代码何时在模拟器上运行,我的意思是记录了什么?我一直在搜索文档一段时间,但还没有运气.
如何在OS X Sierra的Mac上使用PyQt 4或5?似乎我必须等待PyQt的新版本,但我不确定这是否真的如此.
考虑一个带有包含数组的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,因为这需要会影响到实际偏好)
我发现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
自定义纸张?
我有一个用于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甚至更改其用户的组成员身份,特别是如果他们的磁盘刚开始表现,他们吓坏了.这就是为什么我寻求避免像这样的技术性的解决方案.
我试图避免编写单独的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的第二个参数这一事实.到目前为止没有成功.我错过了什么?
我的任务是在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,两者都希望共享相同的数据对象.(请注意,我必须将解密数据保存在内存中,这就是重点).
我最近审查了我一年前发布的一个应用程序。而且我看到现在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 完全一样。
至于鼠标选择矩形 - 我没有覆盖任何鼠标事件。不清楚为什么我没有这个功能。