在 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*()
'在另一个可执行文件中。
不过,我真的不知道您为什么不直接清除父屏幕。
我正在尝试编写一个代码,通过 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*()
'在另一个可执行文件中。
不过,我真的不知道您为什么不直接清除父屏幕。