dangerous fork !
来源:互联网 发布:办公软件基础视频教程 编辑:程序博客网 时间:2024/06/05 20:16
System: Ubuntu
Compiler: gcc
使用fork创建一个子进程的时候,如果一不心可能出现很难找到的BUG,特别是子进程修改父进程的数据的时候.....
下面是一个例子,在父进程打开了一个文件,理论上的"子进程会把父进程的数据拷贝到自己的数据区"是正确的,但
open所打开的文件的数据在系统内存中,而不是在父进程的数据区中! 所以造成的后果就是子进程把文件内部指针位置
给修改了......
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int fd;
int pid;
char buf[10];
void msg( const char * s )
{
long pos = lseek( fd, 0L, 1 );
if( 0L > pos )
perror("lseek failed!\n");
printf("%s...file cursor position is: %d\n", s, pos );
}
int main( int argc, char * argv[] )
{
fd = fopen( "data", O_RDONLY );
if( 0 > fd )
{
perror("open failed!\n");
return 0;
}
msg("before fork");
pid = fork();
msg("after fork");
if( -1 == pid )
{
perror("fork failed!\n");
}
else if( 0 == pid )
{
msg("child: before fseek");
read( fd, buf, 10 );
msg("child: after fseek");
}
else
{
msg("parent: before wait");
wait(0);
msg("parent: after wait!");
}
close( fd );
return 0;
}
- dangerous fork !
- Dangerous
- Dangerous Dive
- fork
- FORK()
- fork
- fork
- fork()
- fork
- fork
- fork
- fork
- fork()
- fork
- fork
- fork
- fork
- fork
- CVSNT和Eclipse配置
- Surciata源码分析之IpsNFQ模式(2)
- sql日期格式化
- sideboxes里的模块随意插入到网页任意位置方法
- 日记-5月18日-痛苦与快乐
- dangerous fork !
- 计算机学生的未来
- zen cart忘记密码怎么办
- 三层架构通用ORM类库 ThreeTierLib v2.0
- zen-cart后台邮箱参数设置
- Introducing AQuery: jQuery for Android
- Session的理解
- iis7应用程序池经常自动停止如何解决?
- JS 动态显示年月日星期时分秒