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

时间:2015-07-05 15:43:00

标签: c linux exec fork

我正在尝试编写一个代码,通过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();



    }


}

如果错误,请纠正我,以便我能解决这个问题。

1 个答案:

答案 0 :(得分:2)

你似乎对两种不同的,无关的东西感到困惑:

  • exec*()fork()
  • 清除屏幕

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

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

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

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

我真的不知道为什么你不只是从父母那里清除屏幕。