我正在尝试编写一个代码,通过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();
}
}
如果错误,请纠正我,以便我能解决这个问题。
答案 0 :(得分:2)
你似乎对两种不同的,无关的东西感到困惑:
exec*()
和fork()
fork
创建一个新的子进程,同时复制当前进程的状态。
exec
是一系列相关函数,其工作是用另一个函数替换当前进程。
在unix系统上,清除屏幕通常是通过ANSI转义码完成的。请不要在循环中打印换行符,这非常便宜。如果您需要终端仿真器之间的可移植性,则可以使用库来抽象此任务,例如termcaps
或(n)curses
。
您提到使用子进程清除屏幕,我怀疑您正在尝试创建某种shell。无论如何,您可以使用fork()
在父函数中创建子项waitpid()
,并直接从子项中清除屏幕,例如使用fputs(stdout, "\033[2J")
或{{ 1}}'在另一个可执行文件中。
我真的不知道为什么你不只是从父母那里清除屏幕。