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
,它可以唱西班牙赞美诗的歌词:)