kubo39's blog

ただの雑記です。

argc = 0 でプロセスを動かす

DMDのコード内ではargcが0な環境を想定してコードが書かれているが、そういう環境は存在するのだろうか。

調べてみるとわりとすぐにstackoverflowがみつかった。

c - executing a process with argc=0 - Stack Overflow

posix_spawnを使えばできるようなので、実際に試してみる。

#include <spawn.h>
#include <stdlib.h>

int main(int argc, char** argv, char** envp)
{
    pid_t pid;
    char* zero_argv[] = {NULL};
    posix_spawn(&pid, "/home/kubo39/dlang/dmd-2.085.0/linux/bin64/dmd", NULL, NULL, zero_argv, envp);
    int status;
    waitpid(&pid, &status, NULL);
    return 0;
}

たしかにargcが0のときの処理が実行されているようだ。

$ ./a.out
Error: missing or null command line arguments                                                                                                                               
$ echo $?
0

ちなみにrustcの場合は Error: couldn't determine self executable name と表示され、goでは panic: runtime error: index out of range になった。