C中的strstr()和exit(0)问题

杰弗里·乔丹

因此,我正在使用C(家庭作业)在模拟的Linux shell上进行操作,如果用户只是简单地键入“ quit”,我将退出程序。

但是,如果他们在命令内的某处抛出“退出” ...“猫文件;退出”

我需要它像通常一样执行命令,然后退出。

我知道我仍然必须过滤输入的字符串并将其退出出口,但是现在,我只是简单地尝试使用strstr()使其识别“ exit”的子字符串并退出程序。如果输入当前包含带有子字符串“ exit”的字符串,它将一直循环播放。

谢谢。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define bSize 1000

void driveLoop();
char *userInput(void);

int main(int argc, char **argv){

    driveLoop();

    return 0;

}

void driveLoop(void){
    char *comTokens[100];
    char *tempTokens;
    char *command;
    char *cd;
    char *cdDir;
    char *cdTemp;
    char cdBuf[bSize];
    char checkExit[] = "exit";

    for (;;){

        printf("> ");
        command = userInput();

        if (!command)
            break;

        char *exitPtr = strstr(command, checkExit); // using strstr on the pointer containing the input

        int i = 0;
        tempTokens = strtok(command, " \t\n");

        while (tempTokens && i < 99){
            comTokens[i++] = tempTokens;
            tempTokens = strtok(NULL, "\t\n");
        }

        if (strcmp(comTokens[0], "exit") == 0){ // this exit is working normally
          exit(0);
        }

        if (strcmp(comTokens[0], "cd") == 0){
            cd = getcwd(cdBuf, sizeof(cdBuf));
            cdDir = strcat(cd, "/");
            cdTemp = strcat(cdDir, comTokens[1]);
            continue;
        }

        comTokens[i] = NULL;

        pid_t cFork = fork();

        if (cFork == (pid_t) - 1){
            perror("fork");
        }

        else if (cFork == 0){
            execvp(comTokens[0], comTokens);
            perror("exec");

            if (exitPtr != NULL){ // here's where I'm calling the exit
                exit(0); // nothing happens though. It just keeps looping.
            }
        }

        else {
            int status;
            waitpid(cFork, &status, 0);
        }
    }
}

char *userInput(void){
    char *input = NULL;
    size_t size = 0;
    getline(&input, &size, stdin);
    return input;
}
内特·艾德雷奇
    else if (cFork == 0){
        execvp(comTokens[0], comTokens);
        perror("exec");

        if (exitPtr != NULL){ // here's where I'm calling the exit
            exit(0); // nothing happens though. It just keeps looping.
        }
    }

execvp如果成功则不会返回,因此if通常不会执行您的操作。(如果execvp返回,则您可能希望无条件退出孩子,最好使用_exit()。)

您真正想要的是让进程退出。因此,您可能想将此代码放在fork的父分支中:

    else {
        int status;
        waitpid(cFork, &status, 0);
        // add it here
        if (exitPtr != NULL){
            exit(0);
        }

    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

strstr函数和c中的多维数组

来自分类Dev

C 编程中的 strstr() 函数

来自分类Dev

bash脚本中的exit 0,exit 1和exit 2是什么意思?

来自分类Dev

在C ++中exit和std :: exit有什么区别?

来自分类Dev

C ++中strstr()函数的时间复杂度,空间复杂度和算法是什么?

来自分类Dev

Python中的exit(0)和exit(True)之间有区别吗?

来自分类Dev

c中的exit(0)仅偶尔起作用

来自分类Dev

c中的exit(0)仅偶尔起作用

来自分类Dev

'\ 0' 和printf(c)中

来自分类Dev

javascript 中的 str_replace、strstr 和 substr

来自分类Dev

C ++中std :: cin和isdigit的问题

来自分类Dev

C#中的异步和等待问题

来自分类Dev

Hibernate和C3p0池的问题

来自分类Dev

erlang中的c程序exit(0)等效函数调用是什么?

来自分类Dev

c#ASP.net MVC中的DropDownlist和列表问题

来自分类Dev

C中带有const char *和strcpy()的问题

来自分类Dev

有关C#中的数组和列表的问题

来自分类Dev

c#ASP.net MVC中的DropDownlist和列表问题

来自分类Dev

C中的按位运算符和移位问题

来自分类Dev

在 C# 和 SpecFlow 中创建 RemoteWebDriver 实例的问题

来自分类Dev

C++ 中的浮点和双精度问题

来自分类Dev

C 中字符串数组和函数的问题

来自分类Dev

在C和C ++中,-0是什么意思?

来自分类Dev

Dart中的strstr函数等效

来自分类Dev

C strstr无法正常工作

来自分类Dev

.bat中的IF,CALL,EXIT和%ERRORLEVEL%

来自分类Dev

线程“ AWT-EventQueue-0”中的异常java.lang.NullPointerException和JTable问题

来自分类Dev

上传0字节图像-C#.NET Core和异步问题

来自分类Dev

关于“地址运算符”(&)和c和c ++中的数组的问题

Related 相关文章

热门标签

归档