用管道写守护进程

用管道写守护进程,我写了两个函数,一个读函数,一个写函数,读函数里判断写的函数是否向管道里写了东西,如果写了,直接读取显示,如果没写,就会让其再次执行,然后显示,我写的比较简单,主要是方便理解,实际应用的程序绝对不会像我这样。



下面是我的write函数


#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define FIFO_SERVER  "/root/myfifo"


main(int argc,char **argv)
{
    int fd;
    char w_buf[100];
    int nwrite;


    fd = open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);
/*
    if(argc == 1)
    {
        printf("Please send something\n");
	exit(-1);
    }
    */
    strcpy(w_buf,argv[1]);

    if(nwrite = write(fd,w_buf,100) == 1)
    {
        if(errno == EAGAIN)
	{
	    printf("The FIFO has not read yet,please try late\n");
	}
	else
	{
	    printf("write %s to the FIFO\n",w_buf);
	}
    }
}


read函数
#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define FIFO  "/root/myfifo"

main(int argc,char** argv)
{
    int fd;
    char buf_r[100];
    int nread;

    if((mkfifo(FIFO,O_CREAT|O_EXCL) < 0)&&(errno != EEXIST))
        printf("cannot create fifoserver\n");
    
    printf("Preparing for reading types...\n");

    memset(buf_r,0,sizeof(buf_r));

    fd = open(FIFO,O_RDONLY|O_NONBLOCK,0);

    if(fd == -1)
    {
	perror("open");
	exit(1);
    }
    
    while(1)
    {
        memset(buf_r,0,sizeof(buf_r));
	if((nread = read(fd,buf_r,100)) == -1||(nread = read(fd,buf_r,100)) == 0)
	{
	    if(errno == EAGAIN)
	        printf("no data yet\n");
	    system("./write abc");
	    printf("restart\n");
	}
	printf("read %s from FIFO\n",buf_r);
	sleep(1);
    }
    pause();
    unlink(FIFO);
       
}

非常的完美!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值