Linux下,使用CC++一个简单的消息处理程序

    技术2022-05-20  27

    // all.h

    #ifndef _ALL_H#define _ALL_H

    // ANSC C/C++#include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <assert.h>

    // linux#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include<fcntl.h>

    // micro define//#define OutErrStr(info) (printf("Error : %s/n", info))

    //#define OutErrInt(info) (printf("Error : %d/n", info))#define BUFF_SIZE 1024 * 1

    #endif

     

    /* end all.h ******************************************************* */

     

     

    // main.c

    #include "all.h"

    // functionstatic int ChildProcessFun(void *pParam);

    // structstruct _PROCESS_PARAM{ #define STR_1 "This is date on pipe." #define DADA_LEN sizeof(STR_1) char chBuff[BUFF_SIZE]; int nPipe[2]; pid_t nProcess;};

    int main(){ printf("Run .../n"); 

     struct _PROCESS_PARAM ProcessParam;

     int nFlag = pipe(ProcessParam.nPipe); if (nFlag == -1) {  printf("Error: crrete pipe failed!/n");  printf("------------------------------/n/n"); } assert(ProcessParam.nPipe[0]); assert(ProcessParam.nPipe[1]);  // create a child press ProcessParam.nProcess = fork(); if (ProcessParam.nProcess < 0) /* create process failed */ {  printf("Error: create child process failed!/n");  printf("------------------------------/n/n"); } else if (ProcessParam.nProcess > 0) /* parent process */ {  printf("/nNote:  in parent process .../n");  printf("New child process ID = %d/n", ProcessParam.nProcess);    // write pipe  close(ProcessParam.nPipe[0]);  write(ProcessParam.nPipe[1],  STR_1, strlen(STR_1)); } else /* child process */ {  if(ChildProcessFun(&ProcessParam) == 0)  {   printf("Child process exit .../n");  }  else  {   printf("Error: Child process dead lock .../n");   printf("------------------------------/n/n");   } }

      // close pipe close(ProcessParam.nPipe[0]); close(ProcessParam.nPipe[1]); printf("parent process exit .../n"); return 0;}

    // child process funtionstatic int ChildProcessFun(void *pParam){ struct _PROCESS_PARAM ProcessParam = /          (struct _PROCESS_PARAM) /          *(struct _PROCESS_PARAM *)pParam;

     printf("Note: in child process .../n"); printf("The child process ID = %d/n", ProcessParam.nProcess);  // read pipe close(ProcessParam.nPipe[1]); read(ProcessParam.nPipe[0], ProcessParam.chBuff, DADA_LEN); ProcessParam.chBuff[DADA_LEN] = '/0'; /* good action */ printf("Read the pipe data: %s/n", ProcessParam.chBuff);  printf("*********************************/n/n"); return 0;  }

    /* end main.c ******************************************************* */

    // -----------------------------------------------------------------------------------------------

    # makefile

    objets = main.orubbish = $(objets) main

    main : main.o g++ -o main main.o

    main.o : main.c all.h g++ -c main.c

    .PHONY : cleanclean : -rm $(rubbish) 

    # end makefile

     

    /* end makefile ******************************************************* */


    最新回复(0)