分享一段代码,pipe的一个使用案例
代码语言:javascript复制/* pipeServer.c - reads requests over pipe */
#include <stdio.h>
#include <ioLib.h>
#include <pipeDrv.h>
#include <taskLib.h>
typedef struct
{
VOIDFUNCPTR pRoutine;
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 10
static int pipeFd;
/**************************************************
* Server task which reads from a pipe
* and executes the function passed in the MSG_REQUEST data structure.
*/
LOCAL void pipeServer()
{
MSG_REQUEST msgRequest;
while(read(pipeFd,(char *)&msgRequest,sizeof(MSG_REQUEST))>0)
{
if(NULL != msgRequest.pRoutine)
{
(*msgRequest.pRoutine)(msgRequest.arg);
}
}
}
/**************************************************
* 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()
{
/* 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);
}
printf("pipe server startedn");
return (OK);
}
/**************************************************
* Sends a request to the server to
* execute a function at the server's priority.
*
* RETURNS: OK or ERROR on failure.
*/
STATUS serverSend(VOIDFUNCPTR pRoutine, int arg)
{
MSG_REQUEST msgRequest;
int status = ERROR;
if(ERROR != pipeFd)
{
/* Initialize the message structure */
msgRequest.pRoutine = pRoutine;
msgRequest.arg = arg;
/* Send the message and return the results */
status = write(pipeFd, (char *)&msgRequest, sizeof(MSG_REQUEST));
if(status == sizeof(MSG_REQUEST))
{
status = OK;
}
}
return (status);
}
这段代码的作用是什么?看标题!
贴个图吧
有异议的请留言