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

📄 pipeserver.c

📁 vxworks中的demo
💻 C
字号:
/* pipeServer.c - Demonstrates intertask communication using pipes *//* Copyright 1984-1997 Wind River Systems, Inc. *//*modification history--------------------01c,06nov97,mm  added copyright.01b,19sep97,ram need to add INCLUDE_PIPE in configAll.h		 added include files stdio.h,ioLib.h,pipeDrv.h01a,11mar94,ms   cleaned up for VxDemo*//* DESCRIPTION * * Demonstrates intertask communication using pipes. * * serverStart initializes a server task to execute functions * at a low priority and uses pipes as the communication * mechanism.  * * serverSend sends a request to the server to execute a  * function at the server's  priority using pipe device. * Usage : serverSend (<function>, <argument of the function>) * * EXAMPLE * To run this demo from the Wind shell do as follows: * * -> serverStart * value = 0 = 0x0 * -> serverSend (printf,"Hello World. \n") * value = 0 = 0x0 * * NOTE: A host function such as i() cannot be used as the function *       argument to serveSend. *	 eg: -> serverSend(i,"tShell") will not work *       However if you wish to do that then make sure to add *	 INCLUDE_CONFIGURATION_5_2 and INCLUDE_DEBUG in configAll.h*//* includes */#include "vxWorks.h"#include "taskLib.h"#include "stdio.h"#include "ioLib.h"#include "pipeDrv.h"typedef struct    {    VOIDFUNCPTR routine;    int arg;    } MSG_REQUEST; 	                        /* message structure */#define TASK_PRI		254             /* tServers task's priority */#define TASK_STACK_SIZE         5000            /* tServer task's stack size */#define PIPE_NAME		"/pipe/server"  /* name of the pipe device */#define NUM_MSGS                10     /* max number of messages in the pipe */LOCAL int pipeFd;                     /* File descriptor for the pipe device */LOCAL void pipeServer ();             /* server task *//*********************************************************************** * 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 ()    {    if (pipeDevCreate (PIPE_NAME, NUM_MSGS, sizeof (MSG_REQUEST)) == ERROR)        {        perror ("Error in creating pipe"); /* print error if pipe is already                                             * created, but do not return */        }    /* Open the pipe */    if ((pipeFd = open (PIPE_NAME, UPDATE, 0)) == ERROR)        {        perror  ("Error in opening pipe device");        return (ERROR);        }	    /* Spawn the server task */    if (taskSpawn ("tServer", TASK_PRI, 0, TASK_STACK_SIZE,                    (FUNCPTR) pipeServer, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)                    == ERROR)        {        perror ("Error in spawning tServer task");	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,              /* name of the routine to execute */    int arg                           /* argument of the routine */            )    {    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 ()	{	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 + -