C source-code/script/program 是否使用类似 shebang 的命令?
Does a C source-code/script/program uses a shebang-like command?
这可能是个愚蠢的问题,但我还是会试试的:
当您将 shell 脚本转换为可执行文件时,它会使用 shebang 来了解您 运行 使用哪个解释器。 C code/script/program uses/has 有类似的东西吗?
可执行 C 程序的开头是否有任何幻数?
经过一些 google-ing,我想我理解了以下内容(尽管我不是 100% 确定):
某些编程语言,例如 bash、python、php 和其他语言使用解释器 - 因此可能需要 shebang。与编译器不同,解释器每次调用时都会将程序代码翻译成机器语言。
C 不使用解释器,而只使用编译器——它只将代码一次转换为可执行文件/目标文件。
所以答案是——不——c 代码不需要 shebang。
是的。
C 程序可执行文件(和所有编译语言)以 "magic" 个字符 0x7f
E
L
F
开头。 Linux 内核识别它的方式与识别 shebang 脚本的方式相同,只是它随后会触发 ELF 加载程序,而不是脚本解释器。
这不是 实际上 shebang,但它是类似的。
术语 "magic number" 实际上更适用于编译程序而不是脚本。在 shebang 被发明之前,已经有识别可执行文件的神奇数字。
幻数是固定偏移量(通常是文件的开头)处的任何短字节序列,旨在使程序能够快速确定文件的格式。有一个 ELF 幻数,一个 PNG 幻数数字,一个 gzip 幻数...
shebang 有点像模仿 幻数原理。
另外,在ELF中是一个叫做ELF解释器的东西,内核必须知道,类似于脚本解释器。如果 ELF 可执行文件有解释器,内核将在解释器的入口点而不是主可执行文件的入口点启动程序。每个动态链接程序都使用此功能。动态链接器是ELF解释器。
shebang 被 shell* 用来识别需要预先启动可执行程序的脚本,脚本将作为参数提供给该脚本。
例如名为 "myscript.pl" 的脚本,具有可执行访问权限
#!/usr/bin/perl
# perl script
shell 看到 #!
并开始这样的过程:
/usr/bin/perl myscript.pl
编译出来的C程序是可以直接执行的,"magic number"不是说is/was一个C程序。幻数意味着它是一个适合 OS 的特定可执行文件,然后可执行机器代码(从给定地址开始)将直接由 the/a 处理器执行。
*历史上,shell 负责检测 shebang。现在内核直接做它(见下面的评论)。
这可能是个愚蠢的问题,但我还是会试试的:
当您将 shell 脚本转换为可执行文件时,它会使用 shebang 来了解您 运行 使用哪个解释器。 C code/script/program uses/has 有类似的东西吗?
可执行 C 程序的开头是否有任何幻数?
经过一些 google-ing,我想我理解了以下内容(尽管我不是 100% 确定):
某些编程语言,例如 bash、python、php 和其他语言使用解释器 - 因此可能需要 shebang。与编译器不同,解释器每次调用时都会将程序代码翻译成机器语言。
C 不使用解释器,而只使用编译器——它只将代码一次转换为可执行文件/目标文件。
所以答案是——不——c 代码不需要 shebang。
是的。
C 程序可执行文件(和所有编译语言)以 "magic" 个字符 0x7f
E
L
F
开头。 Linux 内核识别它的方式与识别 shebang 脚本的方式相同,只是它随后会触发 ELF 加载程序,而不是脚本解释器。
这不是 实际上 shebang,但它是类似的。
术语 "magic number" 实际上更适用于编译程序而不是脚本。在 shebang 被发明之前,已经有识别可执行文件的神奇数字。
幻数是固定偏移量(通常是文件的开头)处的任何短字节序列,旨在使程序能够快速确定文件的格式。有一个 ELF 幻数,一个 PNG 幻数数字,一个 gzip 幻数...
shebang 有点像模仿 幻数原理。
另外,在ELF中是一个叫做ELF解释器的东西,内核必须知道,类似于脚本解释器。如果 ELF 可执行文件有解释器,内核将在解释器的入口点而不是主可执行文件的入口点启动程序。每个动态链接程序都使用此功能。动态链接器是ELF解释器。
shebang 被 shell* 用来识别需要预先启动可执行程序的脚本,脚本将作为参数提供给该脚本。
例如名为 "myscript.pl" 的脚本,具有可执行访问权限
#!/usr/bin/perl
# perl script
shell 看到 #!
并开始这样的过程:
/usr/bin/perl myscript.pl
编译出来的C程序是可以直接执行的,"magic number"不是说is/was一个C程序。幻数意味着它是一个适合 OS 的特定可执行文件,然后可执行机器代码(从给定地址开始)将直接由 the/a 处理器执行。
*历史上,shell 负责检测 shebang。现在内核直接做它(见下面的评论)。