问题标签 [system-calls]
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 - 我怎么能拦截 linux 系统调用?
除了 LD_PRELOAD 技巧和将某个系统调用替换为您提供的系统调用的 Linux 内核模块之外,是否有可能拦截系统调用(例如打开),以便它首先通过您的函数,然后才到达实际打开?
windows - 从忽略读取错误的光学介质中恢复
我有存档在光学媒体(CD 和 DVD)中的文件的备份。这些都有 par2 恢复文件,存储在单独的媒体上。即使在没有 par2 文件的情况下,在一个光驱上读取时的小错误也可以在另一个驱动器上正常读取。
问题是,当读取有故障的媒体时,读取时间非常非常长,因为设备往往会重试多次。
问题是:如何控制重试次数(即设置为不重试或只试一次)?一些系统调用?可以下载的库吗?我必须在 SCSI 层上工作吗?
这个问题主要是关于 Linux 的,但任何 Win32 指针也将受到欢迎。
linux - 冗余 Linux 内核系统调用
我目前正在开发一个项目,该项目挂钩各种系统调用并将内容写入日志,具体取决于调用的是哪个。因此,例如,当我更改文件的权限时,我会在日志文件中写入一个小条目来跟踪旧权限和新权限。但是,我在确定应该观看的确切位置时遇到了一些麻烦。对于上面的示例,strace 告诉我“chmod”命令使用系统调用 sys_fchmodat()。但是,还有一个 sys_chmod() 和一个 sys_fchmod()。
我确信内核开发人员知道他们在做什么,但我想知道:所有这些(看似)冗余系统调用的意义何在,是否有任何规则说明哪些系统调用用于什么?(即“at”系统调用还是以“f”为前缀的系统调用是为了做一些特定的事情?)
linux - 在 Linux 上从用户空间挂钩 sycall
有什么方法可以捕获 Linux 上的所有系统调用?我知道的唯一解决方案是使用 LD_PRELOAD à la fakeroot,但这仅适用于动态链接的应用程序。此外,这种方法需要枚举所有系统调用,这是我想避免的。
c - 有没有比解析 /proc/self/maps 更好的方法来找出内存保护?
在 Linux(或 Solaris)上,有没有比/proc/self/maps
反复手动解析更好的方法来确定您是否可以读取、写入或执行存储在内存中一个或多个地址的任何内容?
例如,在 Windows 中,您有VirtualQuery
.
在 Linux 中,我可以mprotect
更改这些值,但我无法将它们读回。
此外,除了做一些非常侵入性的事情并在进程中的所有线程上使用并拦截任何可能影响内存的尝试之外,还有什么方法可以知道这些权限何时更改(例如,当有人mmap
在我背后使用文件时)地图?ptrace
syscall
更新:
不幸的是,我在 JIT 内部使用了它,它几乎没有关于它正在执行的代码的信息来获得常量的近似值。是的,我意识到我可以拥有可变数据的常量映射,例如 Linux 使用的 vsyscall 页面。我可以放心地假设初始解析中未包含的任何内容都是可变且危险的,但我对该选项并不完全满意。
现在我要做的是阅读/proc/self/maps
并构建一个结构,我可以通过二进制搜索来获得给定地址的保护。任何时候我需要了解一个不在我的结构中的页面,我会重新阅读 /proc/self/maps 假设它已经被同时添加,否则我将要进行段错误。
似乎解析文本以获取此信息并且不知道它何时更改是非常笨拙的。(/dev/inotify
几乎对任何东西都不起作用/proc
)
linux - 系统调用:UNIX、Linux、BSD 和 Solaris 变体
主要 *NIX 变体中的系统调用数量是否存在差异?
哪些系统调用将得到普遍支持?
c++ - 如何在 C++ 中读取 system() 调用的结果?
我正在使用以下代码尝试df
在 Linux 中使用popen
.
这段代码给了我一个退出状态为“2”的“内存错误”,所以我可以看到它失败的地方,我只是不明白为什么。
我从Ubuntu Forums和C++ Reference上找到的示例代码把它放在一起,所以我没有嫁给它。如果有人可以提出更好的方法来读取 system() 调用的结果,我愿意接受新的想法。
编辑原文:好的,bufSize
结果是否定的,现在我明白为什么了。您不能像我天真地尝试那样随机访问管道。
我不能成为第一个尝试这样做的人。有人可以给(或指向我)一个示例,说明如何将 system() 调用的结果读取到 C++ 中的变量中吗?
language-agnostic - 当可以使用库函数时使用 system() 函数是不好的做法吗?为什么?
假设正在开发的应用程序需要一些功能,可以通过对命令行程序进行系统调用或利用库来实现。假设效率不是问题,那么简单地对程序进行系统调用而不是使用库是不好的做法吗?这样做有什么缺点?
具体来说,这种情况的一个示例是需要从 Web 服务器下载文件的应用程序,可以使用 cURL 程序或 libcURL 库。
c - 如何从任意 pthread_t 获取线程 ID?
我有一个 pthread_t,我想更改它的 CPU 亲和力。问题是我使用的是 glibc 2.3.2,它没有pthread_setaffinity_np()。不过没关系,因为 pthread_setaffinity_np() 本身就是sched_setaffinity()的包装器,可以通过传递线程 ID 而不是进程 ID 来调用它来设置任意线程的亲和性。
但是...... sched_setaffinity 可以使用的线程 id 是操作系统线程 id,您可以从gettid()系统调用中获得这种类型。这与不透明类型 pthread_t 不同,gettid() 只会返回当前线程的线程 ID 。我需要能够设置任意线程的 CPU 亲和性。
不幸的是,我无法访问 pthread 的私有部分,这会让我通过将 pthread_t 强制转换为 a 来窃取线程 ID struct pthread *
。我猜这样会更好,因为依赖私有实现会带来更多麻烦。
我也一直在阅读pthread_getunique_np函数,但是这会返回一个“唯一的整数标识符”——我不相信它在任何形状或形式上都等同于操作系统线程 ID。
因此,问题是:如何从任意 pthread_t 获取线程 ID?
user-interface - 使用系统调用的 Common Lisp GUI 编程
谁能告诉我有关使用(钢铁银行)Common Lisp 通过系统调用编写 GUI 的信息?我知道那里有一些图书馆,但这是一个语言学习练习,所以我想自己做。
我正在 Kubuntu 8.10 和 SBCL 1.0.18 上开发。
谢谢。