一周没更新了吧。前几天ACM省赛,郁闷惨了。我怎么会遇到这种恶心事。昨天开始把我的虚拟机换成真正的操作系统了。那个累阿。。。。
闲话不说,继续PROGRAMMING~~
我觉得题目这个函数很有必要多说一点。这个是我目前知道唯一linux下派生新线程的东东。一定要熟练运用。不然以后你写的服务器只能服务一个人鸟。嘻嘻。
打个比方,fork函数的意思是。我是个领导(服务器主进程)。我在办公室。你(客户)来找我有事(accept连接上了),我分派(fork)给小弟(子线程)干。我还在办公室。你们两个干的什么我不知道了。
只说理论不容易懂fork。
看个程序先。
main()
{
pid_t pid;
if((pid=fork())<0)
{
printf("error!");
}
else
{
if(pid==0)
printf("a/n");
else
printf("b/n");
}
}
结果是返回a,b或者b,a
因为fork调用将执行两次返回分别从子进程和父进程返回
由于父进程和子进程无关,父进程与子进程都可能先返回
上边那两句是摘网上的。但是我认为写的不太全面。应该是子进程被先返回的几率大。
这个程序的执行就是从fork调用开始开出了一个子进程。后边的判断语句是如果当前运行的是子进程。输出b。否则输出a。懂了没?懂了再来看个程序
main()
{
pid_t a_pid,b_fork;
if((a_pid=fork())<0)
{
printf("error!");
}
else
{
if(a_pid==0)
printf("b/n");
else
printf("a/n");
}
if(b_pid=fork()<0)
{
printf("error!");
}
else main()
{
pid_t a_pid,b_fork;
if(a_pid=fork()<0)
{
printf("error!");
}
else
{
if(a_pid==0)
printf("b/n");
else
printf("a/n");
}
if(b_pid=fork()<0)
{
printf("error!");
}
else
{
if(b_pid==0)
printf("c/n");
else
printf("a/n");
}
}
这两个程序都是从网上摘的,不要学他的编程风格哦,丑死了。我看csdn和chinaunix上有说返回4个字母的,有说返回6个的。。。。N篇争论。晕了。我的跑出来是6个,其实本来就应该是6个。。。。。。WHY?
留作思考。电脑快没电了。。。。。。明天中午贴这篇。知道的跟帖回复好。明天晚上再写吧。睡觉去了。HOHO
闲话不说,继续PROGRAMMING~~
我觉得题目这个函数很有必要多说一点。这个是我目前知道唯一linux下派生新线程的东东。一定要熟练运用。不然以后你写的服务器只能服务一个人鸟。嘻嘻。
打个比方,fork函数的意思是。我是个领导(服务器主进程)。我在办公室。你(客户)来找我有事(accept连接上了),我分派(fork)给小弟(子线程)干。我还在办公室。你们两个干的什么我不知道了。
只说理论不容易懂fork。
看个程序先。
main()
{
pid_t pid;
if((pid=fork())<0)
{
printf("error!");
}
else
{
if(pid==0)
printf("a/n");
else
printf("b/n");
}
}
结果是返回a,b或者b,a
因为fork调用将执行两次返回分别从子进程和父进程返回
由于父进程和子进程无关,父进程与子进程都可能先返回
上边那两句是摘网上的。但是我认为写的不太全面。应该是子进程被先返回的几率大。
这个程序的执行就是从fork调用开始开出了一个子进程。后边的判断语句是如果当前运行的是子进程。输出b。否则输出a。懂了没?懂了再来看个程序
main()
{
pid_t a_pid,b_fork;
if((a_pid=fork())<0)
{
printf("error!");
}
else
{
if(a_pid==0)
printf("b/n");
else
printf("a/n");
}
if(b_pid=fork()<0)
{
printf("error!");
}
else main()
{
pid_t a_pid,b_fork;
if(a_pid=fork()<0)
{
printf("error!");
}
else
{
if(a_pid==0)
printf("b/n");
else
printf("a/n");
}
if(b_pid=fork()<0)
{
printf("error!");
}
else
{
if(b_pid==0)
printf("c/n");
else
printf("a/n");
}
}
这两个程序都是从网上摘的,不要学他的编程风格哦,丑死了。我看csdn和chinaunix上有说返回4个字母的,有说返回6个的。。。。N篇争论。晕了。我的跑出来是6个,其实本来就应该是6个。。。。。。WHY?
留作思考。电脑快没电了。。。。。。明天中午贴这篇。知道的跟帖回复好。明天晚上再写吧。睡觉去了。HOHO