我的代码如下
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("a\n");
fork();
printf("b\n");
if(fork() == 0) {
printf("c\n");
exit(0);
}
printf("d\n");
return 0;
}
输出:
a
b
d
a
b
c
a
b
d
a
b
c
我不知道输出重复多次的原因。
答案 0 :(得分:8)
我不知道为什么输出重复多次
因为printf()
已缓冲。
当进程调用fork()
时,生成的子进程将获得父进程缓冲区的副本。
您可以在每次调用fflush(stdout)
之前放置fork()
来清空此输出缓冲区。在这种情况下,输出应为:
a
b
b
d
c
d
c
请注意,如果输出引用到终端,默认情况下它将是行缓冲,即:每次向输出发送\n
时,都会转储缓冲区。如果要将输出重定向到文件,则不是这样。
答案 1 :(得分:4)
当你调用fork()
时,它会获得调用进程的输出缓冲区的副本。默认情况下启用缓冲,因此您会收到此行为。
你可以使用
fflush(stdout);
在调用fork()之前。或者,您也可以使用
禁用缓冲setbuf(stdout, NULL);
您可以阅读有关fork here的更多信息。如果您需要更多帮助,请告诉我。
答案 2 :(得分:1)
答案已在评论中。您正在拨打<div class="main-panel">
<h1> Good Services Delivery</h1>
<div class="parent">
<a class="btn btn-1">Arrival & Emergency</a>
<a class="btn btn-2">Obstetric & Gynecology</a>
<a class="btn btn-3">WAD</a>
<a class="btn btn-4">Ortopedik & Medikal </a>
<a class="btn btn-5">Pediatrik</a>
<a class="btn btn-6">Mortuary</a>
</div>
</div>
两次。因此解决方案是只调用一次并将结果保存在像public static int countNumbers(int[] sortedArray, int lessThan) {
int i = java.util.Arrays.binarySearch(sortedArray, lessThan);
if (i < 0) {
return -i - 1;
} else {
// in case of duplicates, find first occurrence
for (; i > 0 && sortedArray[i - 1] == lessThan; i--);
return i;
}
}
这样的变量中。此外,您应检查fork-call是否失败(如果失败,则返回负值)。
fork()