fgets始终返回一个非空指针

问题描述

我正在学习有关Linux中的过程控制的知识,并且在使用函数fgets()时遇到了问题。我试图简化代码,如下所示:

#define BUF 50
char cmd_raw[BUF];
void tmp();
int main()
{
    FILE *fp;
    fp = fopen("./test.sh","r");
    while(fgets(cmd_raw,BUF,fp)!=NULL)
    {
        tmp();
        printf("%s\n",cmd_raw);
    }
}
void tmp()
{
    pid_t fork_result;
    fork_result = fork();
    if (fork_result == -1)
        return;
    else if (fork_result == 0)
    {
        exit(0);
    }
    else
    {
        int stat_val;
        waitpid(fork_result,&stat_val,0);
    }
}

文件./test.sh可以是包含三行以上的任何文件,例如:

echo aaa
echo bbb
echo ccc

执行上述代码时,语句fgets(cmd_raw,fp)!=NULL始终为true,结果程序无休止地循环。据我了解,子流程一旦创建便立即退出,因此尽管代码本身也是分叉的,但不应在子流程中访问while循环。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)