Linux下进程创建fork和进程间通信

【转载】Linux下进程创建fork和进程间通信
http://blog.chinaunix.net/uid-29963649-id-4923603.html

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#define READ_TERMINAL 0
#define WRITE_TERMINAL 1

int main() {
int file_descriptors[2];
pid_t pid_f;
char PipeBuf[64]={‘a’,‘0’};
int read_ret=0;
pipe(file_descriptors);
pid_f=fork();
if (pid_f<0)
{
printf(“fork error!\n”);
exit(1);
}
else if (pid_f==0)
{
//子进程向父进程发一则消息
printf(“Write in Pipe To FatherProcess!\n”);
close(file_descriptors[READ_TERMINAL]);
sleep(1);
write(file_descriptors[WRITE_TERMINAL],“Child Send”,sizeof(“Child Send”));
//open(file_descriptors[READ_TERMINAL]);
}
else
{
//父进程接收(读取)消息
printf(“Read in Pipe From ChildProcess!\n”);
//通过fcntl()修改为使得读管道数据具有非阻塞的特性
int flag=fcntl(file_descriptors[READ_TERMINAL],F_GETFL,0);
flag |= O_NONBLOCK;
if(fcntl(file_descriptors[READ_TERMINAL],F_SETFL,flag) < 0){
perror(“fcntl”);
exit(1);
}
close(file_descriptors[WRITE_TERMINAL]);
read_ret=read(file_descriptors[READ_TERMINAL],PipeBuf,sizeof(PipeBuf));//没阻塞的读
printf(“Read Message are : %s\n”,PipeBuf);

    read_ret=read(file_descriptors[READ_TERMINAL],PipeBuf,sizeof(PipeBuf));
    printf("Read Message are : %s,ret=%d \n",PipeBuf,read_ret);    
    //总结:实践证明默认的读管道具有阻塞特性,若管道内无数据,则一直等待,若无33-38行,则是采用的默认值,读具有阻塞特性
    //            但是也可以通过fcntl()修改为使得读管道数据具有非阻塞的特性
    //            当关闭了写端口时,写端口,直接就是写不去,但是不阻塞的
    
}
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值