1
0
Fork 0
CANopenNode/socketCAN/CO_notify_pipe.c
Janez fdda4c8340 move stack/neuberger-socketCAN/ socketCAN
Compare with initial commit of neuberger-socketCAN.
Try to use original code.
2020-01-24 12:22:54 +01:00

60 lines
1,005 B
C

/* Snipped from https://stackoverflow.com/a/2486353 */
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <stdlib.h>
#include "CO_notify_pipe.h"
struct CO_NotifyPipe {
int m_receiveFd;
int m_sendFd;
};
CO_NotifyPipe_t *CO_NotifyPipeCreate(void)
{
int pipefd[2];
CO_NotifyPipe_t *p;
int ret = pipe(pipefd);
if (ret < 0) {
return NULL;
}
p = calloc(1, sizeof(CO_NotifyPipe_t));
if (p == NULL) {
return NULL;
}
p->m_receiveFd = pipefd[0];
p->m_sendFd = pipefd[1];
fcntl(p->m_sendFd,F_SETFL,O_NONBLOCK);
return p;
}
void CO_NotifyPipeFree(CO_NotifyPipe_t *p)
{
if (p == NULL) {
return;
}
close(p->m_sendFd);
close(p->m_receiveFd);
free(p);
}
int CO_NotifyPipeGetFd(CO_NotifyPipe_t *p)
{
if (p == NULL) {
return -1;
}
return p->m_receiveFd;
}
void CO_NotifyPipeSend(CO_NotifyPipe_t *p)
{
if (p == NULL) {
return;
}
write(p->m_sendFd,"1",1);
}