父子进程的问题

adfsf 2011-12-14 12:04:59
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

int main()
{
int fd=open("a.txt", O_RDWR|O_CREAT|O_TRUNC,0666);
if(fork()==0){
char c='A';
for(; c<='Z'; c++){
write(fd, &c, 1);
sleep(1);
}
close(fd);
exit(0);
}
int i=0;
char str[10]={};
for(; i<26; i++){
bzero(str, sizeof(str));//memset(str, 0, sizeof(str));
sprintf(str, "%d", i);
write(fd,str,strlen(str));//我想知道为什么打印的时候是A01B2C3D.....
难道不是交互打印的吗?
sleep(1);
}
close(fd);
}
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jialejiahi 2011-12-15
  • 打赏
  • 举报
回复
sleep不能用来进行进程的同步,因为它并不能保证睡醒了以后,另一个进程已经被调度。
可以用其他的进程间同步方法,比如信号,管道,信号量,消息队列等等。
yyitang 2011-12-15
  • 打赏
  • 举报
回复
进程间用信号量来同步。semget()创建一个信号量。semop()对信号量进行操作。
宇宙漫步者 2011-12-15
  • 打赏
  • 举报
回复
你这样是不能保证父子进程交互执行,这是随机的,如果想要实现那么使用线程/进程的同步机制
qq120848369 2011-12-14
  • 打赏
  • 举报
回复
交互的挺好的。
koutatu 2011-12-14
  • 打赏
  • 举报
回复
楼主的程序打印结果是随机的吧,不能保证是交互打印
qq120848369 2011-12-14
  • 打赏
  • 举报
回复
楼主想要1对1的间隔,可以做个socketpair,父进程写1次文件就写1个字节,并且父进程只有读1字节才能执行下一次loop. 子进程读管道1字节才能写一次,并且写完了要给父进程写1字节。
空的 2011-12-14
  • 打赏
  • 举报
回复
父子进程使用同一文件位移量吧
xtrx 2011-12-14
  • 打赏
  • 举报
回复
这里父子进程没法保证是交互写入文件的,sleep根本不能控制,如果一定要实现交叉打印的要求(A0B1C2D3这种),你需要在父子进程之间同步。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧