在 linux 中使用 exec() 清除屏幕

clear screen using exec() in linux

我正在尝试编写一个代码,通过 exec 使用 fork() 来清除屏幕。但是通过参考 http://man7.org/linux/man-pages/man3/exec.3.html 手册,我很困惑为什么这没有在屏幕上放置新图像(我的意思是清除屏幕)。

这是我的尝试:

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
# include <curses.h>
#define NUMARGS 2



void main(int argc,char* argv[])
{
    pid_t pid;
    char * child_args[NUMARGS] = {0,0};


    if((pid=fork())==0){

        exec();// clear the screen

    }
    else{

        wait();



    }


}

如有错误请指正,以便我解决问题。

您似乎对两个不同的、不相关的事情感到困惑:

  • exec*()fork()
  • 正在清屏

fork创建一个新的子进程,同时复制当前进程的状态。

exec 是一系列相关函数,其工作是用另一个进程替换当前进程。

在 unix 系统上,清除屏幕通常是通过 ANSI 转义码完成的。请不要在循环中打印换行符,这非常便宜。如果您需要终端仿真器之间的可移植性,您可以使用库来抽象此任务,例如 termcaps(n)curses.


您提到使用子进程来清除屏幕,我怀疑您正在尝试创建某种 shell。无论如何,您可以使用 fork() 创建子项,在父函数中使用 waitpid() 它,并直接从子项中清除屏幕,例如使用 fputs(stdout, "3[2J"),或通过 exec*() '在另一个可执行文件中。


不过,我真的不知道您为什么不直接清除父屏幕。