在 x86 程序集中打开文件模式 Linux
Opening file modes in x86 assembly Linux
我正在从《从头开始编程》一书中学习 x86 汇编 Linux,目前我正在学习如何打开文件并读取或写入文件。我在打开文件的选项上遇到问题,我知道 0 是只读的,03101 是写和截断的,我在哪里可以获得所有打开选项的完整文档?
使用:Windows 子系统
我在 /usr/include/asm-generic/fcntl.h
中找到了 x86 asm linux 的正确文件
这与 WSL 无关,而与您选择在 WSL 中安装的 Linux 发行版有关。不同的发行版会把东西放在文件系统的不同地方。
locate '*fcntl*.h'
是找到合适的 headers 的好方法。
您始终可以编译包含记录的 headers 的 C 程序(这将引入“真实的”headers),并查看其 gcc -E -dM
宏定义.甚至
gcc -E -dM /usr/include/fcntl.h | | grep ' O_'
仅过滤 O_ 宏常量。 (我认为 fcntl.h
可能在平原 /usr/include 中,没有埋在某个地方,但也许这只是我的 Arch GNU/Linux 发行版保持简单。它保持 Linux-specific libc header类似于 /usr/include/asm/
中的 <asm/unistd.h>
,您可以在其中找到分别用于 32 位和 64 位索书号的 unistd_32.h
和 unistd_64.h
。
或者编写执行 printf("%x, %x\n", O_CREAT, O_TRUNC)
或其他任何操作的代码来打印出您感兴趣的一些常量,无论它们来自 header。 (或者打印出它们的按位或,比如 O_CREAT|O_TRUNC
)。
像S_IRUSR
这样的权限模式位常量是根据像__S_IREAD
这样的其他常量定义的,所以这有点像老鼠窝;可能只是打印出来是个好主意。或者简单地以八进制写入权限位,如 mov edx, 0o666
(NASM) 或 mov 66, %edx
(GAS)。 (让 umask 清除文件创建时的 write-for-other 位)。
可以在手册页中找到要查找的常量名称,open(2)
。
我正在从《从头开始编程》一书中学习 x86 汇编 Linux,目前我正在学习如何打开文件并读取或写入文件。我在打开文件的选项上遇到问题,我知道 0 是只读的,03101 是写和截断的,我在哪里可以获得所有打开选项的完整文档?
使用:Windows 子系统 我在 /usr/include/asm-generic/fcntl.h
中找到了 x86 asm linux 的正确文件这与 WSL 无关,而与您选择在 WSL 中安装的 Linux 发行版有关。不同的发行版会把东西放在文件系统的不同地方。
locate '*fcntl*.h'
是找到合适的 headers 的好方法。
您始终可以编译包含记录的 headers 的 C 程序(这将引入“真实的”headers),并查看其 gcc -E -dM
宏定义.甚至
gcc -E -dM /usr/include/fcntl.h | | grep ' O_'
仅过滤 O_ 宏常量。 (我认为 fcntl.h
可能在平原 /usr/include 中,没有埋在某个地方,但也许这只是我的 Arch GNU/Linux 发行版保持简单。它保持 Linux-specific libc header类似于 /usr/include/asm/
中的 <asm/unistd.h>
,您可以在其中找到分别用于 32 位和 64 位索书号的 unistd_32.h
和 unistd_64.h
。
或者编写执行 printf("%x, %x\n", O_CREAT, O_TRUNC)
或其他任何操作的代码来打印出您感兴趣的一些常量,无论它们来自 header。 (或者打印出它们的按位或,比如 O_CREAT|O_TRUNC
)。
像S_IRUSR
这样的权限模式位常量是根据像__S_IREAD
这样的其他常量定义的,所以这有点像老鼠窝;可能只是打印出来是个好主意。或者简单地以八进制写入权限位,如 mov edx, 0o666
(NASM) 或 mov 66, %edx
(GAS)。 (让 umask 清除文件创建时的 write-for-other 位)。
可以在手册页中找到要查找的常量名称,open(2)
。