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