⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pipe.c

📁 xenomai 很好的linux实时补丁
💻 C
字号:
#include <sys/types.h>#include <fcntl.h>#include <string.h>#include <stdio.h>#include <native/pipe.h>#define PIPE_MINOR 0/* User-space side */int pipe_fd;int main (int argc, char *argv[]){    char devname[32], buf[16];    /* ... */    sprintf(devname,"/dev/rtp%d",PIPE_MINOR);    pipe_fd = open(devname,O_RDWR);        if (pipe_fd < 0)	fail();    /* Wait for the prompt string "Hello"... */    read(pipe_fd,buf,sizeof(buf));    /* Then send the reply string "World": */    write(pipe_fd,"World",sizeof("World"));    /* ... */}void cleanup (void){    close(pipe_fd);}/* Kernel-side */#define TASK_PRIO  0               /* Highest RT priority */#define TASK_MODE  T_FPU|T_CPU(0)  /* Uses FPU, bound to CPU #0 */#define TASK_STKSZ 4096            /* Stack size (in bytes) */RT_TASK task_desc;RT_PIPE pipe_desc;void task_body (void){    RT_PIPE_MSG *msgout, *msgin;    int err, len;    /* ... */    len = sizeof("Hello");    /* Get a message block of the right size in order to initiate the       message-oriented dialog with the user-space process. Sending a       continuous stream of bytes is also possible using       rt_pipe_stream(), in which case no message buffer needs to be       preallocated. */    msgout = rt_pipe_alloc(len);    if (!msgout)	fail();    /* Send prompt message "Hello" (the output buffer will be freed       automatically)... */    strcpy(RT_PIPE_MSGPTR(msgout),"Hello");    rt_pipe_send(&pipe_desc,msgout,len,P_NORMAL);    /* Then wait for the reply string "World": */    rt_pipe_receive(&pipe_desc,&msgin,TM_INFINITE);    printf("received msg> %s, size=%d\n",P_MSGPTR(msg),P_MSGSIZE(msg));    /* Free the received message buffer. */    rt_pipe_free(&pipe_desc,msgin);    /* ... */}init init_module (void){    int err;    err = rt_pipe_create(&pipe_desc,NULL,PIPE_MINOR);    if (err)	fail();    /* ... */    err = rt_task_create(&task_desc,			 "MyTaskName",			 TASK_STKSZ,			 TASK_PRIO,			 TASK_MODE);    if (!err)	rt_task_start(&task_desc,&task_body,NULL);    /* ... */}void cleanup_module (void){    rt_pipe_delete(&pipe_desc);    rt_task_delete(&task_desc);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -