在 POSIX 中,main(void) 可以恢复命令行参数吗?
In POSIX, can a main(void) recover command line arguments?
在 C 中,真的需要 int main(int argc, char *argv[])
来接收程序参数吗?换句话说,当定义带有签名 int main(void)
的主函数时,是否可以仅使用 POSIX 接口恢复程序参数?
我觉得我错过了什么,看到那个:
- POSIX 定义了多个接口来检索其他特定于进程的信息。例如,有用于环境变量的接口(可以说是从 C99 继承的,但也扩展了
unsetenv()
等功能)和主机识别(gethostid()
)。
- 特定操作系统定义了 "global" 检索命令行参数的方法。例如,Windows 提供
GetCommandLineW
和 CommandLineToArgvW
函数,而 HP-UX 提供全局变量 __argc_value
和 __argv_value
。 Linux有/proc/self/cmdline
,可以解析为argv
和argc
.
POSIX 规范不包括可以检索命令行参数的函数。所有指定的函数本质上都需要 main()
来协调传递 argc
和 argv
进行解析。
POSIX 规范(IEEE 1003.1,2013 版 - 我撰写本文时的当前版本)有一节描述了标准实用程序使用的命令行语法(在 "Shell and Utilities"体积)。然而,这些实用程序 - 很自然地 - 会使用 POSIX 函数,因此将使用调用它们的 main(argc, argv)
来实现。
在 C 中,真的需要 int main(int argc, char *argv[])
来接收程序参数吗?换句话说,当定义带有签名 int main(void)
的主函数时,是否可以仅使用 POSIX 接口恢复程序参数?
我觉得我错过了什么,看到那个:
- POSIX 定义了多个接口来检索其他特定于进程的信息。例如,有用于环境变量的接口(可以说是从 C99 继承的,但也扩展了
unsetenv()
等功能)和主机识别(gethostid()
)。 - 特定操作系统定义了 "global" 检索命令行参数的方法。例如,Windows 提供
GetCommandLineW
和CommandLineToArgvW
函数,而 HP-UX 提供全局变量__argc_value
和__argv_value
。 Linux有/proc/self/cmdline
,可以解析为argv
和argc
.
POSIX 规范不包括可以检索命令行参数的函数。所有指定的函数本质上都需要 main()
来协调传递 argc
和 argv
进行解析。
POSIX 规范(IEEE 1003.1,2013 版 - 我撰写本文时的当前版本)有一节描述了标准实用程序使用的命令行语法(在 "Shell and Utilities"体积)。然而,这些实用程序 - 很自然地 - 会使用 POSIX 函数,因此将使用调用它们的 main(argc, argv)
来实现。