为什么argv和envp参数不能执行指向const的指针?

Pet*_*sin 5 c posix process

以execve(2)为例,根据posix有这个原型[1]:

int execve(const char *path, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎好像

int execve(const char *path, const char *const argv[], const char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

本来是一个明显的改进.

所以,有谁知道为什么会这样?什么可以解释是否需要可能操纵给定的argv/envp字符串?

[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/exec.html

小智 -2

某些程序会操纵 argv 字符串,以便ps输出显示一些状态信息。例如:

root      6550 10809  0 13:10 ?        00:00:00 pure-ftpd (IDLE)
root     32216     1  0 Apr05 ?        00:00:00 vtund[s]: waiting for connections on port 5000
1023     30448  9847  0 09:01 ?        00:00:01 imap [username 192.168.1.135]
Run Code Online (Sandbox Code Playgroud)

因此 argv 值不是恒定的,不应如此声明。

  • 然而,据推测,这些程序会修改它们自己的地址空间中的 argv 字符串的副本,而不是调用“execve”的进程的地址空间。 (4认同)