c - 在 Sublime Text 3 中构建 C 文件并使用 fork();

标签 c sublimetext3

(在 Mac 上运行)我的 C.sublime-build 文件如下所示:

{
"cmd" : ["gcc -Wall -g $file_name -o ${file_base_name} && ./${file_base_name}"],
"selector" : "source.c",
"shell": true,
"working_dir" : "$file_path"
}

我有一个包含以下代码的简单程序:

#include <stdio.h>
#include <unistd.h>

int main ( int argc, char *argv[] ) {
    printf("hi\n");
    fork();
    printf("bye\n");

    return 0;
}

sublime 会执行它并给我

hi
bye
hi
bye

从 shell 执行时给出了正确的结果,

hi
bye
bye

为什么会发生这种情况?

最佳答案

根据 ISO C:

Standard input and standard output are fully buffered, unless they refer to a terminal device, in which case, they are line buffered.

当您使用 ST3 时,它不引用终端设备,因此它是完全缓冲的。这意味着 hi\nbye\n 将被存储在缓冲区中,并且 fork() 将它们复制到子进程。那么两者都会输出两次。

当您使用 shell 时,您正在使用终端设备,并且它是行缓冲的。在执行过程中,首先会输出hi\n,并且由于\n而刷新缓冲区。然后bye\n被发送到缓冲区并输出两次。

关于c - 在 Sublime Text 3 中构建 C 文件并使用 fork();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654142/

相关文章:

c - 如何在sublime text 3中编译运行C?

java - 如何在 Sublime Text 3 中自动导入 java 库?

c - printf 在 for 循环中打印更多行

c - realpath() 不解析符号链接(symbolic link)?

将 32 位数字转换为四个 8 位数字

c - 下面的输出应该是什么以及为什么它应该取决于编译器?

sublimetext3 - 如何在没有软件包控制的情况下安装sublime软件包?

c - 在各种编译器和优化级别下,bool 在 c 中的存储

python - Sublime Text : Hide all code and show only comments (with line break)

regex - 如何对所有行进行正则表达式