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

分数

(在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;
}

崇高将执行它,给我

hi
bye
hi
bye

虽然从外壳执行给我正确的结果,

hi
bye
bye

为什么会这样呢?

Qmick Zh

根据ISO C:

标准输入和标准输出是完全缓冲的,除非它们引用终端设备,在这种情况下,它们是行缓冲的。

当您使用ST3时,它不指向终端设备,因此已完全缓冲。这意味着hi\n并将bye\n存储在缓冲区中,fork()并将其复制到子进程中。然后它们都将被输出两次。

当您使用外壳程序时,您使用的是终端设备,并且它是行缓冲的。在执行期间,hi\n将首先输出,并且由于导致缓冲区被刷新\n然后bye\n发送到缓冲区,将输出两次。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章