问题标签 [fcntl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - open() 没有设置 O_CLOEXEC 标志
我尝试使用 open() 设置 O_CLOEXEC 标志并且没有成功。
考虑以下微测试:
在内核版本 2.6 的 linux 上运行时,测试成功并打印“OK!”,但在 3.8 或 3.9 内核上失败。
怎么了?谢谢!
python - Python中的USB记忆棒序列号
我正在尝试在 Linux 上使用 Python 获取 USB 闪存驱动器的序列号(或任何基于硬件的唯一标识符)。我从我在这个 SO question中找到的食谱开始。
该链接中的代码非常适合固定硬盘驱动器。例如,在我的内部笔记本电脑 SSD 上,它返回:
摇摆!
但是,当我在闪存棒上运行它时,我从 ioctl 收到一个错误,该错误与以下 python 跟踪不协调:
文件表明它们是同一种野兽:
我不确定它们有何不同,但它们显然在某个地方存在分歧。这些设备之间有什么区别,有什么方法可以统一获取它们的标识符?
linux - 在不轮询的情况下收到关于flock/lockf/fcntl 更改的通知
有没有办法(在 Linux 中)在不轮询的情况下获取文件锁定状态的更新?
我知道可以通过 lockf(fd, F_TEST) 或推测性 LOCK_NB|LOCK_SH 轮询状态,但轮询是错误的(tm)。
当然,可以通过简单的锁定尝试来确定文件何时未锁定,但我也想对另一边进行采样(用例:(大型)程序使用 lockf 在实例之间同步 - 我可能会得到它变成了flock,我想添加一个GUI,当锁可以获取时显示,当然不是占用锁)。
请注意, inotify 在这种情况下不起作用,至少在 linux 3.9.1 上是这样。
python - 按任意键继续(Python,跨平台解决方案)
我正在尝试使用 Python 2.7.x 在 Linux/Mac/Windows 机器上创建脚本的一种行为。
在这个线程的一些帮助下:
我可以达到预期的效果:按任意键脚本都会退出。
但也许有更好的方法来做到这一点?有人可以帮帮我吗?
谢谢!
python - 使流 read() 阻塞
这个的反面是什么?
我试过了
但它会导致AttributeError: 'module' object has no attribute 'O_BLOCK'
.
为了提供一点背景知识,我将数据分块输送到popen
'ed 进程的 STDIN 中。如果 STDOUT 中有数据等待,我需要立即读取它并将其传递回客户端(因此切换到非阻塞)。但是,当我完成管道数据输入后,我需要阻塞,直到我在 STDOUT 上获得 EOF。
如果有更好的方法来做到这一点(理想情况下是跨平台的?)那么我全神贯注
c - 如何在 Mac 上自动创建“close-on-exec”套接字?
当我在 Linux 上创建套接字时,可以O_CLOEXEC
在创建时间指定标志:
所以没有办法,其他一些线程会在这个套接字保持打开的情况下做fork()
+ 。exec()
但是在 Mac 上,根据手册,我不能做同样的伎俩:
套接字具有指定的类型,它指定了通信的语义。当前定义的类型有: SOCK_STREAM SOCK_DGRAM SOCK_RAW SOCK_SEQPACKET SOCK_RDM
该标志O_CLOEXEC
只能通过调用来设置fcntl()
。而且这不是一种原子方式 - 某些线程可能会exec()
在调用socket()
and之间进行fcntl()
。
如何解决这个问题?
c - How to check if a file is locked or not?
I have the following code where I want to check if the file is locked or not. If not then I want to write to it. I am running this code by running them simultaneously on two terminals but I always get "locked" status every time in both tabs even though I haven't locked it. The code is below:
android - 尝试在 Xperia E C1504 上打开 /dev/radio0 返回 EBUSY
我有一个根深蒂固的 Xperia E C1504,我想在它上面访问 FM 接收器芯片组,用于我正在开发的自定义 FM 收音机应用程序。问题是我对 /dev/radio0 的 fcntl open() 调用不断返回 EBUSY(错误号 16:设备或资源忙)。这是我用来尝试打开设备的代码(在根 shell 中执行):
我也尝试了 open(DEFAULT_RADIO_DEVICE,O_RDONLY),但我很确定我需要对设备的写访问权,并且仍然收到 EBUSY。
我验证了收音机设备与股票 FM Radio 应用程序一起工作,该应用程序能够调谐到一个频率并成功接收 PCM。我通过它的电源按钮图标关闭了这个应用程序(这应该释放 /dev/radio0,对吗?)并从设置->应用程序菜单中明确强制停止股票 FM Radio 应用程序,甚至删除 Radio.apk(股票 FM无线电应用程序包)从 /system/apps 使用根浏览器然后重新启动手机,但我的程序在执行上述指令时继续返回 EBUSY。
调查哪个进程可能会锁定 /dev/radio0 并杀死它的最佳方法是什么?我试过 [adb shell "su -c 'lsof /dev/radio0'"] 但返回的列表没有任何与 /dev/radio0 完全匹配的条目。'/dev/log/radio' 的例子很多,只有 'radio' 这个词有近 300 个例子,但我期待看到列出的东西正好使用 /dev/radio0。我也试过 [adb shell ps | 返回的grep radio]
kfmradio 进程看起来很可疑,所以我尝试杀死它,它没有返回任何错误,但重新运行上面过滤的 ps 列表显示 kfmradio 仍在进程列表中(我想操作系统重新启动它?)有关故障排除的任何建议fcntl open() 调用的 EBUSY 返回将非常有帮助。
设备型号:索尼 Xperia E C1504
Linux内核:3.4.0
安卓操作系统:4.1.1
固件版本:Stock Kernel Xperia E C1505_11.3.A.0.47(应该也适用于 C1504)
植根于:SRSRoot 和“Gandalf”漏洞利用。
android - Android 不支持健壮的 futex,那么如何实现健壮的互斥锁呢?
我发现android ndk中的pthread.h不包含强大的futexes函数,那么如果我想访问多个进程之间的共享内存(mmap)该怎么办?
PS:现在,我使用std::shared_mutex + fcntl,其中shared_mutex是线程的,fcntl是进程的,当进程崩溃时会释放锁。它有效,但很脏。
python - fcntl.lockf() 以什么方式锁定文件?
我目前正在尝试通过 python 锁定文件,因此其他进程甚至无法读取它。
到目前为止,我正在通过 python 解释器测试 fcntl.lockf() 的行为:
我已经尝试过这个和 fcntl.lockf 的其他一些变体,但我仍然能够第二次打开文件并获得他的 fd。我能够阅读它并写入它。
我是否遗漏了什么,或者这根本不应该为其他进程锁定文件?还有其他方法吗?