Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
execvp()输出为ncurses创建缩进_C_Ncurses - Fatal编程技术网

execvp()输出为ncurses创建缩进

execvp()输出为ncurses创建缩进,c,ncurses,C,Ncurses,我现在的项目有个奇怪的问题。使用ncurses,我正在基于lsh制作一个shell,在我介绍ncurses之前,它只需编写execvp的输出就可以正常工作。然而,现在输出的长度在我的提示符前做了一个缩进,这实际上也将X坐标移到了一边(因此缩进似乎不是行的一部分) 我认为这是由于没有ncurses(或者类似的东西)就进入了子进程 您可以看到完整的代码,但以下是运行execvp的部分: int shell_launch(char **args) { pid_t pid; int st

我现在的项目有个奇怪的问题。使用ncurses,我正在基于lsh制作一个shell,在我介绍ncurses之前,它只需编写execvp的输出就可以正常工作。然而,现在输出的长度在我的提示符前做了一个缩进,这实际上也将X坐标移到了一边(因此缩进似乎不是行的一部分)

我认为这是由于没有ncurses(或者类似的东西)就进入了子进程

您可以看到完整的代码,但以下是运行execvp的部分:

int shell_launch(char **args) {
    pid_t pid;
    int status;

    pid = fork();
    if (pid == 0) {
        //  Child process.

        //  Check if user is trying to run an allowed program.
        for (int i = 0; i < arrlen(allowed_cmds); i++) {
            if (strcmp(allowed_cmds[i], args[0]) == 0) {
                if (execvp(args[0], args) == -1) {
                    perror("shell");
                }
            }
        }
        exit(EXIT_FAILURE);
    } else if (pid < 0) {
        //  Error forking
        perror("shell");
    } else {
        //  Parent process
        do {
            waitpid(pid, &status, WUNTRACED);
        } while (!WIFEXITED(status) && !WIFSIGNALED(status));
    }
    return 1;
}
int shell_启动(字符**args){
pid_t pid;
智力状态;
pid=fork();
如果(pid==0){
//子进程。
//检查用户是否正在尝试运行允许的程序。
对于(int i=0;i
如果您已使用ncurses初始化屏幕,则该屏幕处于原始模式,这(除其他外)使换行符不再映射到回车/换行符


如果您要运行子shell,那么您应该恢复终端模式,然后在返回时恢复原始模式。这些都是使用和重置程序模式完成的。

听起来您需要使用管道读取子流程的输出,这样您就可以通过ncurses将其输出。最终,它正常工作了,不知道您需要这样做,简单的修复被忽略了。非常感谢你!