在x86汇编语言Linux中打开文件模式

cvxl0en2  于 2022-09-19  发布在  Linux
关注(0)|答案(2)|浏览(167)

我正在从《从头开始编程》这本书中学习x86汇编语言Linux,目前我正在学习如何打开文件并对其进行读写。
我在打开文件的选项上遇到了麻烦。我知道0用于只读,03101用于写入和截断,但我从哪里可以获得所有打开选项的完整文档?

9wbgstp7

9wbgstp71#

这不是关于WSL,而是关于你选择在你的WSL中安装什么Linux发行版。​不同的发行版会将内容放在文件系统中的不同位置。
locate '*fcntl*.h'是查找适当标头的好方法。

您始终可以编译包含文档头的C程序(这将拉入“真正的”头),并查看其gcc -E -dM宏定义。甚至是

gcc -E -dM /usr/include/fcntl.h | grep ' O_'

只过滤O_MACRO常量。(我认为fcntl.h很可能位于普通的/usr/include中,而不是隐藏在某个地方,但也许这只是我的Arch GNU/Linux发行版的简单之处。它将特定于Linux的libc头文件(如<asm/unistd.h>)保存在/usr/include/asm/中,在/usr/include/asm/中,您可以分别找到32位和64位序列号的unistd_32.hunistd_64.h。)或者让常见的包含路径搜索发生:

echo '#include <fcntl.h>' | gcc -E -dM - | grep ' O_'

或者编写执行printf("%x, %x\n", O_CREAT, O_TRUNC)或其他操作的代码,以打印出您感兴趣的一些常量,无论它们来自哪个标题。(或者打印出它们的按位OR,如O_CREAT|O_TRUNC)。

许可模式位常量(如S_IRUSR)是根据其他常量(如__S_IREAD)定义的,因此它有点像老鼠窝;打印出来可能是个好主意。或者简单地以八进制写入权限位,如mov edx, 0o666(NASM)或mov $0666, %edx(GAS)。(让UMASK清除文件创建时的写操作)。

要查找的常量的名称可以在手册页open(2)中找到。

z9smfwbn

z9smfwbn2#

使用:Windows子系统我在/usr/Include/ASM-Generic/fcntl.h中找到了适用于x86 ASM Linux的正确文件

相关问题