时钟信号打断管道读写

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <assert.h>
#define interval 5

static int pfd[2];
void sig_handler(int signum)
{
        printf("capture alarm signum %d\n",signum);
        int msg = signum;
        int n = send(pfd[1], &msg, 1, 0);
        if (n < 0)
                perror("send error");
        alarm(interval);
}
int main()
{
        alarm(interval);

        int buf[BUFSIZ], net;
        struct sigaction act;
act.sa_handler = sig_handler;
        act.sa_flags = 0;
        sigfillset(&act.sa_mask);

        sigaction(SIGALRM, &act, NULL);

        net = socketpair(PF_UNIX, SOCK_STREAM, 0, pfd);
        assert(net != -1);

        int FLAG = fcntl(pfd[1], F_GETFL, NULL);
        fcntl(pfd[1], F_SETFL, FLAG | O_NONBLOCK);

        while(1){
                int n = recv(pfd[0], buf, sizeof(buf), 0);
                        //perror("accept");
                //printf("recv %d\n", n);
                write(STDOUT_FILENO, buf, n);
        }


        return 0;
}

代码思路:设置管道和定时信号,5s定时跳到信号处理函数,向管道写数据,然后主函数从管道读数据,如此往复。

问题:写数据不会报错,读数据recv阻塞状态被打断无法读取,即使没读到下一次循环不就读到了吗,刚入门新手求处理方法。

将读数据写到线程里。就不会打断主线程业务了。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632