首页
社区
课程
招聘
未解决 [求助]fork之后执行printf和execl,printf执行成功但是没有输出
发表于: 2020-6-18 20:53 2126

未解决 [求助]fork之后执行printf和execl,printf执行成功但是没有输出

2020-6-18 20:53
2126

首先是execl执行的程序 pipe.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

int main(int argc, char* argv[]){
        int fd[2];
        int pid;
        char words[]="This is ABCDEFGHIJKLMNOPRSRUWXYZ";
        char buff[50];
        if(pipe(fd)<0){
                printf("bad pipe");
                exit(1);
        }
        pid = fork();
        if(pid<0){
                printf("fork failed");
        }
        else if(pid > 0){
                close(fd[0]);
                write(fd[1],words,strlen(words)+1);
                write(fd[1],"??????????",11);
                //printf("parent writing finished\n");
        }
        else{
                close(fd[1]);
                read(fd[0],buff, strlen(words)+1);
                printf("child read content: %s\n", buff);
                read(fd[0],buff, strlen(words)+1);
                printf("child read content: %s\n", buff);
        }
        exit(0);
}


调用 execl的程序 iterate.c


#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char* argv[]){

        int pid,times, fd, ret;
        char val[20];
        times = atoi(argv[2]);
        //fd = open("./stdio",O_WRONLY|O_CREAT);
        //write(fd,"111",4);
        //close(fd);
        while(times--){
                pid = fork();
                if(pid < 0){
                        printf("fork failed\n");
                        exit(-1);
                }
                else if(pid == 0){
                                  printf("[%d]", times); //这个printf不输出任何信息
                                                execl(argv[1],NULL);   //
                }
        }
}


iterate.c 里面的printf不输出东西,调试发现返回值是正确的。 论坛里的朋友们,可以指教一下么?



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-6-20 09:28 被B1GJ0hn编辑 ,原因: 漏贴了两行代码
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 1931
活跃值: (442)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
wait函数的问题,你fork过后没有wait
wait通常与fork同时出现,这里查阅资料得知
在fork函数执行前,只有一个进程在执行这段代码,在这fork过后,就变成两个进程在执行了,两个进程代码完全相同,将要执行的都是下一句,同时子进程fork的返回值这里也就是fpid跟父进程的fpid不相同, 子进程的fpid为0, 而父进程的fpid为新创建子进程的进程id,所以需要在else阶段阻塞父进程,等待子进程执行完毕过后在继续父进程,不然会直接结束
2020-6-18 22:16
0
雪    币: 245
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
TopGreen wait函数的问题,你fork过后没有wait wait通常与fork同时出现,这里查阅资料得知 在fork函数执行前,只有一个进程在执行这段代码,在这fork过后,就变成两个进程在执行了,两个进 ...

抱歉,我代码改格式之后好像漏了两行 iterate.c line 19-20(已经重新编辑)。我觉得应该不是wait的关系,就算不wait,子程序也算独立的程序会一直运行知道子程序自己退出,这里我的问题是我在GDB里面看到printf执行成功了,但是在stdout上没有任何输出。

最后于 2020-6-20 09:30 被B1GJ0hn编辑 ,原因:
2020-6-20 09:29
0
游客
登录 | 注册 方可回帖
返回
//