问题标签 [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.
unix - 为什么 rename() 系统调用禁止将我无法写入的目录移动到其他目录?
我试图理解为什么这个设计决定是使用 4.2BSD 中的 rename() 系统调用做出的。我在这里没有要解决的问题,只需了解行为本身的基本原理即可。
4.2BSD 引入了 rename() 系统调用,目的是允许对文件进行原子重命名/移动。从 4.3BSD-Reno/src/sys/ufs/ufs_vnops.c:
很明显,这个检查是故意添加的。我的问题是——为什么?这种行为应该是直观的吗?
这样做的效果是不能将一个不能写入的目录(位于一个可以写入的目录中)移动到另一个可以原子写入的目录。但是,您可以创建一个新目录,移动链接(假设一个人对该目录具有读取权限),然后删除一个人对该目录的写入位。你不能原子地这样做。
我们现在有一个我无法写入的目录,其中包含我无法读取的内容,我无法以原子方式移动。但是,我可以通过更改权限、创建新目录、使用 ln 创建新链接以及更改权限来非原子地实现相同的效果。(留给读者作为练习)
. 和 .. 已经是特殊情况了,所以我并不特别相信,如果我不能写一个目录,我就不能“改变 ..”,这就是消息来源所暗示的。除了代码作者认为正确的行为之外,还有什么理由吗?如果我们让人们在他们可以写的目录之间原子地移动目录(他们不能写),会发生什么不好的事情吗?
c - 使用 stat() 获取文件类型的替代方法?
是否有可以确定文件类型的 stat (在大多数 Unix 系统上都可以找到)的替代方法?手册页说调用 stat 很昂贵,我需要在我的应用程序中经常调用它。
system-calls - 如何使用 sparc 组件获得高分辨率时间?
我使用系统调用 SYS_time,但它的分辨率是 1 秒。还有其他解决方案吗?
c - C系统调用open/read/write/close和O_CREAT|O_EXCL
给定以下代码(它应该在“helloworld”文件中写入“helloworld”,然后读取文本):
我第一次运行程序时,输出是:
之后每次我运行程序,输出是:
我不明白为什么没有附加文本,因为我指定了 O_APPEND 文件。是因为我包含了 O_CREAT 吗?如果文件已经创建,不应该忽略 O_CREAT 吗?
macos - OSX 中 XNU 内核的系统调用列表和文档
我试图弄清楚如何获取 OSX 中 XNU 内核中可用的系统调用的列表和文档。我用谷歌搜索了很多,但找不到任何有用的东西。据我了解,调用约定与 BSD 匹配,对吗?
谢谢
c - 调用 linux splice() 时参数无效
我想试试 splice 系统调用。我有这个功能 - 它应该将一个文件的内容复制到另一个文件:
在第一次迭代中对 splice 的第二次调用每次都返回 EINVAL (来自 perror 的无效参数) - 可能是什么原因?
c - 如何确定堆栈中保存的值?
我正在做一些实验,并希望能够在系统调用期间查看堆栈中保存的内容(用户登陆进程的保存状态)。根据http://lxr.linux.no/#linux+v2.6.30.1/arch/x86/kernel/entry_32.S它表明寄存器的各种值保存在堆栈指针的那些特定偏移量处。这是我一直试图用来检查堆栈中保存的内容的代码(这是在我创建的自定义系统调用中):
其中 value 是一个无符号长整数。
截至目前,该值不是预期的(它显示为 ds 的用户值保存了 0)。
我是否正确访问堆栈指针的偏移量?
另一种可能性可能是我可以在内核中使用诸如 GDB 之类的调试器来检查堆栈内容吗?我在调试方面没有太多广泛的用途,并且不确定如何调试内核中的代码。任何帮助深表感谢。
windows - 我如何知道系统调用属于哪个 DLL?
我有一长串我的程序所做的所有调用。我需要知道的是每个调用属于哪个 DLL。我怎么会发现这个?
谢谢,
macos - 如何从 OSX 的用户空间写入 x86 调试寄存器?
我想在我的 OSX 用户空间程序中使用 x86 规范 (DR0-7) 中定义的调试 MSR。不幸的是,这些需要 CPL == 0(又名环 0)。我已经翻阅了 OSX 系统调用,除了kernel_debug
没有真正跳出来作为访问这些系统调用的方法。
可能情况是它们只能通过一些更高级别kernel_debug
的接口(如
我的最终目标是访问这些寄存器的功能,而不是寄存器本身。有没有人知道如何做设置硬件断点之类的事情?
linux-kernel - linux-2.6.31添加系统调用需要修改的文件在哪里
当我搜索添加系统调用时,我得到了很多文章,但它们似乎是针对旧版本的,这似乎也是一个微不足道的过程。
但问题是,文章建议的目录不适用于 2.6.31 版本。有谁知道unistd.h
,syscall_table.S
和syscalls.h
/或他们相应的文件在哪里?
提前致谢。