#include <sys/types.h> #include <stdio.h> #include <unistd.h> //#include <errno.h> int glob =6 ; char buf[]="a write a stdout/n"; int main(void) { int var ; pid_t pid ; var = 88 ; if(write(STDOUT_FILENO , buf , sizeof(buf)-1) != sizeof(buf)-1) { printf("write error/n"); } printf("before fork /n"); if((pid = fork()) < 0) { printf("fork error/n"); } else if(pid==0) { glob++; var++; } else { sleep(2); } printf("pid = %d , glob = %d , var = %d/n" , getpid() , glob , var); exit(0); } 这里用strlen计算不包含终止null字节的字符串长度。而sizeof则计算包括终止null字节的缓冲区长度。 两者的另一个 区别是:使用strlen需要进行一次函数调用,而对于sizeof而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以sizeof在编译时计算缓冲区长度。
|