- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在 C 程序中实现一种检测 USB 是否已连接的方法。我注意到当 USB 连接时,来自 shell 的以下命令将产生如下结果:
root:~# ls /dev/sdb
/dev/sdb
如果 USB 断开连接,我得到
root:~# ls /dev/sdb
ls: /dev/sdb: No such file or directory
因此我假设检测从 c 程序连接的 usb 的最佳方法应该是执行 opendir("/dev/sdb"),但打开调用总是失败。
您是否知道执行此检测的最佳方法是什么?
主要目标是在运行时程序中了解 udev 将硬盘安装到何处,以及 usb 闪存驱动器(如果已插入)的位置。谢谢,冉
最佳答案
A) 为什么你的 opendir
调用失败了?这很容易理解。因为 /dev/sdb
不是目录。对我来说,当您尝试将设备作为目录打开时,很难理解您的期望。如果你想从你的USB驱动器中获取文件列表,你需要挂载
分区(/dev/sdb1
, /dev/sdb2
,等而不是 /dev/sdb
) 到一些 mount point
(directory
)。如果您成功挂载它,那么您可以通过调用打开该目录。许多 Linux 发行版会自动挂载 USB 驱动器。您可以查看分发文档以获取有关自动安装 USB 驱动器的信息。
B) 我认为很容易理解为什么以这种方式检测 USB 设备是个坏主意。
=> 不同的计算机有不同数量的驱动器。所以在很多电脑上/dev/sdb
- 是硬盘。
=> 假设您知道只有一个硬盘驱动器,计算机重启后磁盘命名仍然会发生变化,因此重启后 USB 驱动器可能会变成 sda
而硬盘驱动器会变成sdb
(但通常不会发生这种情况)。
=> 通常,不可能预测一个新字母(sdb
或 sdc
或 sde
)。
=> 您无法访问非 USB 驱动器的 USB 设备。
=> 这种解决方案还有很多其他问题。
C) 我不完全理解你的目标,但是如果你希望你的程序在插入 USB 设备时采取一些行动,那么你能做的最好的解决方案是阅读关于 udev
以及您的发行版的事件系统。如果你想用你的 usb 设备进行一些低级操作,你可以阅读 libusb
。您可以使用 lsusb
命令获取有关 USB 设备的一般信息,该命令通常是发行版的一部分。您可以在谷歌上搜索一些其他推断器命令。
关于linux - 用于 usb 设备/dev/sdb 的 opendir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646531/
我在 C 方面并不是那么有经验,但是在我的一门课上有一个作业,而且我在打开目录时遇到了一些问题。 该计划的目的是(释义): 如果未提供标志或目录,则列出当前目录中的文件名。 如果提供了标志 (-l),
我在使用 opendir() 时收到了一些奇怪的结果: int dtw(char *path) { struct stat statbuf; ... else if (S_IS
我尝试打开另一台计算机的共享目录。这是我使用的代码。 #include #include #include int main() { DIR * rep = NULL; rep
我不知道为什么我在这个函数中不断遇到这个段错误谁能启发我如何摆脱它并使我的程序正常工作......? Lign 33:通量= opendir(路径);Lign 98 : ret = listdir(e
我在使用 C 语言中的 opendir 函数时遇到问题。代码如下: rvm 声明: rvm_t func() { rvmBlock=(rvm_t)malloc(sizeof(rvm_t));
如果调用 opendir(argv[i]) 并且 argv[i] 是 textfile 的名称,而不是目录? 最佳答案 From man opendir : Return Value The open
我想知道是否可以打开一个目录,然后使用 fopen 从中打开一个文件。就像在示例中一样: 我有一个 MAINDIR,里面有 file.txt,所以我想执行以下操作: void openFile(con
在使用 opendir() 获得 DIR * 后,我需要使用 readdir() 来读取结构 dirent 并将其存储到数组中。 为了计算出数组的大小,我可以循环遍历并计算条目数。然后,我可以分配数组
我编写这段代码来打印 /home/keep 中的所有文件,路径为: #include #include #include #include #include #include #inclu
函数 opendir() 返回一个指向目录流 DIR * 的指针,这显然是一种不透明的数据类型。实现是隐藏的。 libc manual声明您不应自己分配 DIR 对象,而应让目录函数处理分配。 在使用
我想使用 opendir() 仅列出特定文件夹(即/www/site/)中的文件夹。我想从列表中排除文件以及“。”和出现在 linux 文件夹列表中的“..”文件夹。我该怎么做呢? 最佳答案 查看 P
php opendir()函数用于打开目录,通常与readdir()和closedir()函数一起用来读取目录下所有文件(即遍历目录),本文章向大家介绍php使用opendir()函数列出目录下所有
在执行 xxx_readdir()在 fuse ,我使用以下代码: static int hello_readdir(const char *path, void *buf, fuse_fill_di
是否可以将 opendir 排序为字母顺序? $user = $fgmembersite->UserFullName(); $handle = opendir("users/$user/"); whi
所以我正在进行目录遍历,但我无法让 opendir 按照我想要的方式工作。它总是无法打开我发送的目录,它给出了一些未知的错误。我通常传入 argv[1],但我放弃了,只是开始硬编码路径。 char *
我想使用 opendir 打开一个目录,但我看到了一些意外的东西。 opendir 适用于从 getcwd 返回的字符串,但不适用于我的辅助函数 read_cwd 返回的字符串,即使这些字符串看起来是
我对 Perl 完全陌生,刚刚开始学习它。我遇到了我需要运行的这个脚本,其中包含一些网络 Tstat 跟踪数据。但是,我收到错误“无法解析日期”。 生成此代码的代码在这里 foreach my $di
一些背景: 我正在为 nginx(网络服务器)编写一个模块,允许在共享环境中即时设置根目录。我有一个包含其他目录的目录,每个托管用户一个;给定与请求域相关的目录路径,我需要确定它属于哪个用户。 --p
我是初学者,我正在编写有关获取文件目录的代码,但我有一些我不明白的地方。 DS = opendir("./");中的“./”是什么意思 我搜索了很多关于 C 编程的站点,但没有一个给我很好的解释。我必
我想检查一个目录是否存在。即使该目录不存在,我也只收到"is"。我应该怎么办?非常感谢! int main() { if(opendir("dsfdsgfdsgrs") == NULL) pri
我是一名优秀的程序员,十分优秀!