Jef*_*rth 5 c command-line-arguments
有没有办法访问命令行参数,而不使用主参数?我需要在另一个函数中访问它,我宁愿不传入它.
我需要一个只能在Mac OS和Linux上使用GCC的解决方案.
我不知道如何在MacOS上做到这一点,但我怀疑我将在这里描述的技巧可以通过一些交叉阅读移植到MacOS.
在linux上,您可以使用ELF二进制文件的所谓".init_array"部分来注册在程序启动期间调用的函数(在调用main()之前).此函数与普通的main()函数具有相同的签名,除非返回"void".因此,您可以使用此函数来记住或处理argc,argv []和evp [].
以下是您可以使用的一些代码:
static void my_cool_main(int argc, char* argv[], char* envp[])
{
// your code goes here
}
__attribute__((section(".init_array"))) void (* p_my_cool_main)(int,char*[],char*[]) = &my_cool_main;
Run Code Online (Sandbox Code Playgroud)
PS:这段代码也可以放在库中,所以它应该适合你的情况.它甚至可以工作,当你的prgr与valgrind一起运行时 - valgrind不会分叉一个新的进程,这会导致/ proc/self/cmdline显示原始的valgrind命令行.
PPS:请记住,在这个非常早期的程序执行期间,许多子系统尚未完全初始化 - 我尝试了libc I/O例程,它们似乎有效,但不依赖它 - 即使可能尚未构建全局变量,等等...
我认为你不应该这样做,因为 C 运行时将准备参数并将其传递到 main via int argc, char **argv,不要尝试通过破解它来操纵行为,因为它很大程度上是不可移植的或可能是未定义的行为!遵守规则,你就会拥有可移植性……除了打破规则,没有其他方法可以做到这一点……
| 归档时间: |
|
| 查看次数: |
6043 次 |
| 最近记录: |