700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 文件描述符fd 文件指针fp和vfork()

文件描述符fd 文件指针fp和vfork()

时间:2020-08-11 06:12:47

相关推荐

文件描述符fd 文件指针fp和vfork()

1.

fd:在形式上是一个非负整数.实际上他是一个索引值、指向kernal为每一个进程所维护的该进程打开文件的记录表.

当程序打开一个文件或者创建一个新文件的时候kernal向进程返回一个文件描述符。

优点:兼容POSIX标准,许多系统调用都依赖于它;缺点:不能移植到unix之外的系统上去

fp:FILE*指针变量标识符

优点:是C语言的通用格式,便于移植

2.

vfork:使用方法同fork差不多,也适用于创建子进程

vofork特点:

1)在子进程调用exec或exit之前,它在父进程的空间里运行,会改变父进程的数据段、栈和堆

eg:

int g_val=0;9 int main()10 {11 pid_t id=vfork();12 if(id<0){13 perror("vfork");14 return 1;15 }16 else if(id==0){//child17 g_val=100;18 printf("child:pid:%d ppid:%d,g_val:%d,&g_val:%p\n",\19getpid(),getppid(),g_val,&g_val);20 exit(1);21 }22 else{23 printf("father:pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\24getpid(),getppid(),g_val,&g_val);25 }26 return 0;27 }

子进程改变了父进程的值(改变了父进程看到的g_val)

2)vfork保证子进程先运行 ,在调用了exec()或者exit()之后,父进程才可能被调度运行

pid_t id=vfork();12 if(id<0){13 perror("vfork");14 return 1;15 }16 else if(id==0){//child17 //g_val=100;18 printf("child:pid:%d ppid:%d\n",\19getpid(),getppid());20 sleep(3); //让子进程先等待3秒再调用exit21 exit(1);22 }23 else{24 printf("father:pid:%d,ppid:%d\n",\25getpid(),getppid());26 }

结果是:子进程打印,等待3秒(调用了exit),父进程被调度

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。