#include <unistd.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <error.h>
 #include <errno.h>
 ;
 char buf[] = "a write to stdout\n";

 int main (int argc, char **argv)
 {
     int var;
     pid_t pid;
     ;
     ) != ) {
         perror("write");
     }

     ) {
         perror("fork");
     } ){
         glob++;
         var++;
         //printf("child: glob:%d var:%d\n",glob, var);
     }else {
         sleep();
     }

     printf("pid:%d,which parent id:%d\n",getpid(), getppid());
     printf("pid:%d glob:%d var:%d\n",getpid() ,glob, var);
     ;
 }

fork once call, twice return

output:

a write to stdout
pid:23354,which parent id:23320
pid:23354 glob:7 var:89
pid:23320,which parent id:23317
pid:23320 glob:6 var:88

2. 此处学习http://blog.csdn.net/sjpz0124/article/details/46947983

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

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

   wait(NULL);
   wait(NULL);

   return 0;
}

fork-LMLPHP

因为程序遇到“\n”,或是EOF,或是缓中区满,或是文件描述符关闭,或是主动flush,或是程序退出,就会把数据刷出缓冲区。需要注意的是,标准输出是行缓冲,所以遇到“\n”的时候会刷出缓冲区,但对于磁盘这个块设备来说,“\n”并不会引起缓冲区刷出的动作,那是全缓冲,你可以使用setvbuf来设置缓冲区大小,或是用fflush刷缓存。

05-08 15:10