您的位置:首页 > 运维架构 > Linux

Linux下fork()函数

2015-10-22 21:38 453 查看
Linux下的fork()函数是系统调用不是C语言内置的库函数,这里mark一下笔试面试中常出现的fork()试题。

程序一:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 2; i++)
{
fork();
printf("+");
}

return 0;

}


结果中输出8个“+”。
程序二:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 2; i++)
{
fork();
printf("+\n"); //注意"\n"
}

return 0;

}
结果中输出6个“+”。
程序三:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 1; i++)
{
fork();
printf("+\n"); //注意"\n"
}

return 0;

}
结果中输出2个“+”。
程序四#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 1; i++)
{
fork();
printf("+");
}

return 0;

}
结果中输出2个“+”。
程序五:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
printf("+\n"); //注意“\n”

return 0;

}结果中输出8个“+”。
程序六:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
printf("+");

return 0;

}
结果中输出8个“+”。

程序七:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
printf("+\n"); //注意"\n"

return 0;

}
结果中输出4个“+”。
程序八:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
printf("+");

return 0;

}结果中输出4个“+”。

程序九:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
printf("+");

return 0;

}
结果中输出2个“+”。

程序十:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
printf("+\n");

return 0;

}


结果中输出2个“+”。

程序十一:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
fork();
printf("+\n");

return 0;

}


结果中输出16个“+”。

程序十二:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
fork();
printf("+");

return 0;

}结果中输出16个“+”。

程序十三:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
fork();
fork();
printf("+");

return 0;

}
结果中输出32个“+”。
程序十四:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
fork();
fork();
fork();
fork();
fork();
printf("+\n");

return 0;

}结果中输出32个“+”。
程序十五:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 3; i++)
{
fork();
printf("+");
}

return 0;

}
结果中输出24个“+”。
程序十六:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 3; i++)
{
fork();
printf("+\n");
}

return 0;

}


结果中输出14个“+”。
程序十七:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 4; i++)
{
fork();
printf("+");
}

return 0;

}
结果中输出64个“+”。

程序十八:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 4; i++)
{
fork();
printf("+\n");
}

return 0;

}结果中输出64个“+”。

程序十九:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 5; i++)
{
fork();
printf("+");
}

return 0;

}
结果中输出120个“+”。

程序二十:

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
int i = 0;
for(i = 0; i < 5; i++)
{
fork();
printf("+\n");
}

return 0;

}
结果中输出145个“+”。

------------------------------------优雅的分割线------------------------------------

上面的fork()试题分为两种。其中一种结合for循环使用,另一种不结合for循环使用。

当不结合for循环使用时,“\n" cout cerr fflush(stdout)等刷新缓冲区的操作不影响"+"的统计结果。当fork()的个数为n个时,结果中输出"+"的个数为2^n个。

而当结合for循环使用时,“\n" cout cerr fflush(stdout)等刷新缓冲区的操作会影响"+"的统计结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息