概述
// all.h
// wenxy created in 2005/04/12,AM
// All copyright reserved.
#ifndef _ALL_H
#define _ALL_H
// ANSC C/C++
#include
#include
#include
#include
// linux
#include
#include
#include
#include
#include
// micro define
//#define OutErrStr(info) (printf("Error : %sn", info))
//#define OutErrInt(info) (printf("Error : %dn", info))
#define BUFF_SIZE 1024 * 1
#endif
// ----------------------------------------------------------------------------------
// main.c
#include "all.h"
// function
static int ChildProcessFun(void *pParam);
// struct
struct _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("------------------------------nn");
}
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("------------------------------nn");
}
else if (ProcessParam.nProcess > 0) /* parent process */
{
printf("nNote: in parent process ...n");
printf("New child process ID = %dn", 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("------------------------------nn");
}
}
// close pipe
close(ProcessParam.nPipe[0]);
close(ProcessParam.nPipe[1]);
printf("parent process exit ...n");
return 0;
}
// child process funtion
static 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 = %dn", ProcessParam.nProcess);
// read pipe
close(ProcessParam.nPipe[1]);
read(ProcessParam.nPipe[0], ProcessParam.chBuff, DADA_LEN);
ProcessParam.chBuff[DADA_LEN] = '