fork和execv引起的读值问题
后来又遇见一次传值问题,结论如下:
传送的一定是字符串,除了末尾以'\0'结尾,中间也不能含0;提供2种解决方法,本身是数字可以加上'0',使用base64
---------
最终父进程代码
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { char *argv[3]; int size = 5; char p[] = "hello"; char str[10]; sprintf(str, "%d", size); argv[0] = str; argv[1] = p; argv[2] = NULL; pid_t pid = fork(); if (pid == 0) execv("./abc", argv); }
子进程代码
#include <stdio.h> int main(int argc, char **argv) { printf("argc %d\n", argc); printf("argv[0] %s, argv[1] %s\n", argv[0], argv[1]); return 0; }
-------------------------
所以这个时候,就去想,平时执行程序时,argv是作为参数输入的,也就是说,其本质是字符串。
这里就不要想着玩指针了,玩死了都。
https://blog.csdn.net/phenixyf/article/details/81530738
itoa找不到,用sprintf
-----------------------
因为是fork的缘故,argv[0]的值是不一样的
怎么读可以读对,不知道
--------------------
gdb同时调试父子进程
set detach-on-fork off i inferior inferior 2
----------------------
父进程代码如下
int size = 5; char p[] = "Hello"; char *argv[3]; pid_t pid; argv[0] = (char *)&size; argv[1] = p; argv[2] = NULL; pid = fork(); if (!pid) { execv("./heart", argv); }
子进程代码如下
int main(int argv, char **argv) { int size; char *p; size = *(int *)argv[0]; p = argv[1]; }
posted on 2021-05-11 09:40 toughcactus 阅读(78) 评论(0) 编辑 收藏 举报