易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 下c编程问题

下面程序出了点问题,我是想子进程1和子进程2先写,然后父进程读,并且要先读子进程1的信息,再读子进程2.
运行下面的代码,发现有时候的结果是child process 2 is sending a message!child process 2 is sending a message!,有时候又正确,我想问问原因
C/C++ code:
#include<unistd.h>
main(){
int pid,pid1,pid2;
int fd[2];
char buffer[100];
char inpipe1[]=”child process 1 is sending a message!”;
char inpipe2[]=”child process 2 is sending a message!”;
while(pipe(fd)==-1);
while((pid1=fork())==-1);
if(pid1==0){
lockf(fd[1],1,0);
write(fd[1],inpipe1,50);
sleep(2);
lockf(fd[1],0,0);
exit(0);
}
}else{
while((pid2=fork()==-1);
if(pid2==0){
lockf(fd[1],1,0);
write(fd[1],inpipe2,50);
sleep(2);
lockf(fd[1],0,0);
exit(0);
}else{
wait(0);
read(fd[0],buffer,50);
printf(“%s\n”,buffer);
wait(0);
read(fd[0],buffer,50);
printf(“%s\n”,buffer);
exit(0);
}
}
}


你无法保证那个进程先运行;即使你睡眠了;也是无法保证的;除非柱塞进程

fork后没法确定是先执行子进程还是父进程,要让子进程1在2之前执行这样的同步起不到任何的作用

那要怎么做。。。

竞争问题。
可以用信号来使进城同步
也有其他方法来让进城同步。
可以参考 <Advanced Programming in Unix Environment>中第十章的内容

还有下面代码。。。。我想要的结果也是子进程先输出,可是发现父进程比子进程更早输出
C/C+


相关问答:

用C或C++如何编写求解3D魔方程序 - C/C++ / C++ 语言

请问用C或C++如何编写求解3D魔方的程序,该从何开始?
谢谢各位,帮忙提点建议吧。

http://www.mofang.net/code/176/182/6581.html

我只能突破60秒!唉。

我刚过40秒

google的android中有个OpenGL ES + ......

C 程序问题(四) - C/C++ / C语言

#include "stdio.h"
int main()
{
  char *ch(char *, char *);
  char str1[]="I am glad to meet you!";
  char str2[]="Welcom to study C!";
&nb ......

VFP如何调用C函数 - 其他数据库开发 / VFP

请问VFP中如何调用C/C++函数?

你要调用什么功能的函数?要看看VFP中有没有对应的函数,如果有就省着再调用了。如果没有,可以将C/C++函数写个DLL或FLL,然后在VFP调用即可。

十豆三 老师,怎么才能修改自己的 ......

关于c:forEach迭代标签的问题

本人在项目中,用ssh架构,想做成分页的效果.
以前我在页面中是,这样取得数据的
<!--进行循环遍历数据-->
<!--进行循环遍历数据-->
<%
List<Users> lof = (List) request.getAttri ......

c归并排序 - C/C++ / C语言

void guibing(int a[],int n)
{
}
我已经初始化了一个数组a[30000]且赋值,想对这个数组进行归并排序。
但是具体怎么实现还是不知道。求源码
比如说。先一个一个排序,然后再将排序好的两个两个排序。那么这个排 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号