📄 pipeserver.c
字号:
/* pipeServer.c - reads requests over pipe */#include "vxWorks.h"#include "pipeDrv.h"#include "taskLib.h"#include "ioLib.h"typedef struct { VOIDFUNCPTR routine; int arg; } MSG_REQUEST;#define TASK_PRI 254 /* server priority */#define TASK_STACK 20000 /* server stack space */#define PIPE_NAME "/pipe/server"#define NUM_MSGS 10int pipeFd;LOCAL void pipeServer ();/*************************************************** serverStart -- Initializes a server task to* execute functons at a low priority. Uses pipes as* the communication mechanism.** RETURNS: OK or ERROR on failure.*/STATUS serverStart (void) { /* Create the pipe device */ if (pipeDevCreate (PIPE_NAME, NUM_MSGS, sizeof (MSG_REQUEST)) == ERROR) return (ERROR); /* Open the pipe */ if ((pipeFd = open (PIPE_NAME, UPDATE, 0)) == ERROR) return (ERROR); /* Spawn the server task */ if (taskSpawn ("tServer", TASK_PRI, 0, TASK_STACK, (FUNCPTR)pipeServer, 0,0,0,0,0,0,0,0,0,0) == ERROR) { close (pipeFd); return (ERROR); } return (OK); }/*************************************************** serverSend -- Sends a request to the server to* execute a function at the server's priority.** RETURNS: OK or ERROR on failure.*/STATUS serverSend ( VOIDFUNCPTR routine, int arg ) { MSG_REQUEST msgRequest; int status; /* Initialize the message structure */ msgRequest.routine = routine; msgRequest.arg = arg; /* Send the message and return the results */ status = write (pipeFd, (char *)&msgRequest, sizeof (MSG_REQUEST)); return ((status == sizeof (MSG_REQUEST)) ? OK : ERROR); }/*************************************************** pipeServer -- Server task which reads from a pipe* and executes the function passed in the* MSG_REQUEST data structure.**/LOCAL void pipeServer (void) { MSG_REQUEST msgRequest; while (read (pipeFd, (char *)&msgRequest, sizeof (MSG_REQUEST)) > 0) (*msgRequest.routine) (msgRequest.arg); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -