继续表现怪异吗?

标签 c operating-system signals

我遇到过这段代码:

int main() {
    int fd[2];
    pipe(fd);
    int pid;

    if ((pid = fork()) < 0) {
        sysCallFailureProcedure();
    }

    if (pid == SON_PROCESS) {

        dup2(fd[0], 0);
        execlp(TETRIS_DISP_NAME, TETRIS_DISP_NAME, NULL);

        sysCallFailureProcedure();
    }

    char c;
    enum Bool hasNotQuitted;
    while (hasNotQuitted) {
        c = getch();
        if (!isAlegalKey(c)) {
            continue;
        }
        if(write(fd[1], &c, 1) < 0) {
            sysCallFailureProcedure();
        }
        kill(pid, SIGUSR2);

        if (c == QUIT_KEY) {
            hasNotQuitted = false;
        }
    }

    return OPERATION_SUCCEEDED;
}

我正在尝试改进它并丢失 continue 语句(这是一个不好的做法)。但当我这么做的时候, 它导致我的程序无法正常运行,它是某种俄罗斯方 block 游戏的运行程序。我所做的就是将 continue 替换为:

if(write(fd[1], &c, 1) < 0) {
    sysCallFailureProcedure();
}
kill(pid, SIGUSR2);

if (c == QUIT_KEY) {
    hasNotQuitted = false;
}

表示继续后面的代码。 谁能告诉我我错过了什么?

最佳答案

我认为不好的做法不在于“继续”,而在于使用 !isALegalKey 构造。这更具可读性/清晰。

while (hasNotQuitted) {
    c = getch();

    if (isAlegalKey(c)) {
        if(write(fd[1], &c, 1) < 0) {
            sysCallFailureProcedure();
        }
        kill(pid, SIGUSR2);

        if (c == QUIT_KEY) {
            hasNotQuitted = false;
        }
    }
}

关于继续表现怪异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955009/

相关文章:

c - C 编程中指针错误的因式分析

c - Malloc、可变长度数组还是静态数组?

编译动态链接内核

linux - 父子之间的信号和 C 中的 fork

C:替换文件中的字符串而不使用临时文件或加载到内存中

c - 函数说节点已删除但并未删除

java - 一个应用程序在 32 位 Linux 机器上可以使用多少内存?

从 XP 切换到 WIN2K 时出现 Java 异常

c - 为什么默认的 SIGPIPE 处理程序被更改?

python - 如何让子进程每 5 秒暂停执行一次外部程序?