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+
相关问答:
#include "stdio.h"
int main()
{
char *ch(char *, char *);
char str1[]="I am glad to meet you!";
char str2[]="Welcom to study C!";
&nb ......
我现在要些一个fortran调用C接口的问题,但是不知道 C语言里面分配的指针怎么付给fortran,又不能在fortran立马先分配好,业务上不允许。
我写了个测试的例子。但是不行。
test.c
#include <stdio.h>
#incl ......
SHIFT加F10与那个键右ctrl边上的那个键功能一样,想屏这个
但不知要怎么写那个组合键!
有没哪个大侠放一段这个的代码或写一段
http://topic.csdn.net/u/20090609/15/7dc9fb70-243f-4070-9cfd-34e48b66e6c6.html
......
两个文件1.PC,1.inc
1.PC有操作oracle数据库的 ,1.inc也有操作oracle数据库
在其他数据中如informix 中$include 1.inc就可以使用了
在ORACLE数据库重 $include 1.inc不可用 EXEC SQL include 1.inc也不可 ......