C 此函数是否始终有四行输出?

C 此函数是否始终有四行输出?,c,fork,C,Fork,以下函数是否始终有四行输出?若否,原因为何?比如在哪种情况下 int main(int argc, char** argv) { printf("hello1\n"); return 0; } 这里要注意的最明显的一点是,它很可能会失败,返回-1,在这种情况下,printf()将只被调用3次。此外,它也可能失败。所以要回答你的问题: 此函数是否始终有四行输出 不可以。如果不先运行程序或做一些假设,就不能对它说任何事情,而且绝对不能说“总是”。这里要注意的最明显的一点是,它很可能

以下函数是否始终有四行输出?若否,原因为何?比如在哪种情况下

int main(int argc, char** argv) {
    printf("hello1\n");
    return 0;
}

这里要注意的最明显的一点是,它很可能会失败,返回
-1
,在这种情况下,
printf()
将只被调用3次。此外,它也可能失败。所以要回答你的问题:

此函数是否始终有四行输出


不可以。如果不先运行程序或做一些假设,就不能对它说任何事情,而且绝对不能说“总是”。

这里要注意的最明显的一点是,它很可能会失败,返回
-1
,在这种情况下,
printf()
只会被调用3次。此外,它也可能失败。所以要回答你的问题:

此函数是否始终有四行输出

不可以。如果不先运行程序或做一些假设,您就不能说任何关于它的事情,而且您肯定不能说“总是”。

fork()
成功时,子进程的PID在父进程中返回,0在子进程中返回。失败时,在父级中返回-1,不会创建子级(从fork手册页)

因此
fork()
也可能失败。 因此,您的程序将在成功时打印4行(因为孩子将打印“C1H2I3L4D\n”,而家长将打印“hello1\n”、“helloh\n”、“helloqq\n”行)

失败时,它将仅在fork调用之前打印3行“hello1\n”,在fork调用之后打印“helloh\n”、“helloqq\n”(将不创建父进程和子进程)

如果您仍有疑问,请打开终端并键入
手动拨叉
。查看返回值。

fork()
成功时,子进程的PID在父进程中返回,0在子进程中返回。失败时,在父级中返回-1,不会创建子级(从fork手册页)

因此
fork()
也可能失败。 因此,您的程序将在成功时打印4行(因为孩子将打印“C1H2I3L4D\n”,而家长将打印“hello1\n”、“helloh\n”、“helloqq\n”行)

失败时,它将仅在fork调用之前打印3行“hello1\n”,在fork调用之后打印“helloh\n”、“helloqq\n”(将不创建父进程和子进程)


如果您仍有疑问,请打开终端并键入
手动拨叉
。查看返回值。

尝试运行它并查看。您是否担心
fork()
失败?如果不是,只要阅读
fork()
的文档,你就会很容易找到答案。它们的顺序可能并不总是一样的。这个问题非常广泛。在极端情况下,即使是简单的
printf
也可能无法工作,或者程序将因资源不足而崩溃。例如,您将堆栈限制设置为1kB,或者无法创建新进程。如果
fork()
返回-1,则将有3行。。。。但是如果没有
#include
它可以唱西班牙语赞美诗:)试着运行它看看。你担心
fork()
失败吗?如果不是,只要阅读
fork()
的文档,你就会很容易找到答案。它们的顺序可能并不总是一样的。这个问题非常广泛。在极端情况下,即使是简单的
printf
也可能无法工作,或者程序将因资源不足而崩溃。例如,您将堆栈限制设置为1kB,或者无法创建新进程。如果
fork()
返回-1,则将有3行。。。。但是如果没有
#include
,它可以唱西班牙赞美诗的歌词:)