最简单的main函数是这样的:
int main() {
printf("Hello World!\n");
return 0;
}
再后来,需要处理传递的参数,是这样的:
int main(int argc, char *argv[]) {
int i = 0;
for (i=0; i<argc; i++) {
printf("argv[%d]=%s\n", i, argv[i]);
}
}
再再后来,在一个大工程中(cups)看到了这个:
// 可执行程序名字为`main`
int main(int argc, char *argv[], char *envp[]) {
// 参数
int i = 0;
for (i=0; i<argc; i++) {
printf("argv[%d]=%s\n", i, argv[i]);
}
// TODO: envp参数
while (*envp) {
printf("%s\n", *(envp++));
}
}
没有留意envp这个第三个参数,直接传递前两个参数,程序始终不正常。感觉非常奇怪。静下心思考才得知可能是envp造成的。
在终端中如何传递第三个参数呢?需要借助代码,比如如下:
// 可执行程序名字为`execve`
int main() {
char *argv[1];
argv[0] = "main";
char *envp[1024];
envp[0]="NAME=Arnold Schwarzenegger";
envp[1]="SEX=male";
execve("./main", argv, envp);
return 0;
}
参见这里:https://www.tutorialspoint.com/unix_system_calls/execve.htm
(知识时间长了真得会忘记,4年前写过这个了https://blog.csdn.net/kangear/article/details/8950930)