diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/ipcparent_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/ipcparent_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,146 @@ + + +
+ +00001 // ipcparent.c +00002 // +00003 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +00004 // All rights reserved. +00005 // This component and the accompanying materials are made available +00006 // under the terms of "Eclipse Public License v1.0" +00007 // which accompanies this distribution, and is available +00008 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00009 // +00010 // Initial Contributors: +00011 // Nokia Corporation - initial contribution. +00012 // +00013 // Contributors: +00014 // +00015 // Description: +00016 // +00017 +00018 // +00019 +00020 #include <stdio.h> +00021 #include <fcntl.h> +00022 #include <unistd.h> +00023 #include <stdlib.h> +00024 #include <sys/stat.h> +00025 #include <errno.h> +00026 #include <spawn.h> +00027 #include <string.h> +00028 #include <sys/wait.h> +00029 +00034 char PressKey() +00035 { +00036 char ch; +00037 fflush(stdout); +00038 ch=getchar(); +00039 return ch; +00040 } +00041 +00047 int Error(char msg[]) +00048 { +00050 printf("%s [Error NUMBER = %d]\n",msg,errno); +00051 PressKey(); +00052 return EXIT_FAILURE; +00053 } +00054 +00055 int main() +00056 { +00058 FILE* childProcessStream; +00060 char fifoFileName[] = "myfifofile"; +00062 char fifoExecFileName[] = "z:\\sys\\bin\\fifochild"; +00064 char popenExecFileName[] = "z:\\sys\\bin\\ipcchild"; +00066 pid_t fifoChildPid; +00068 int fifoRetVal; +00069 int unlinkResult; +00070 int fifoResult; +00072 int childProcessFD; +00073 +00074 char **argv=(char**)malloc(2*sizeof(char*)); +00075 argv[0]=(char*)malloc(50*sizeof(char)); +00076 argv[1] = 0; +00077 strcpy(argv[0], fifoExecFileName); +00078 +00082 unlinkResult=unlink(fifoFileName); +00083 fifoResult = mkfifo(fifoFileName,S_IXGRP); +00085 if(fifoResult == -1) +00086 { +00087 Error("*** failure mkfifo ***"); +00088 PressKey(); +00089 return EXIT_FAILURE; +00090 } +00092 fifoRetVal = posix_spawn(&fifoChildPid, fifoExecFileName, NULL, NULL, argv, (char**)NULL); +00094 free((void*)argv[0]); +00095 free((void*)argv); +00096 if(fifoRetVal != 0) +00097 { +00098 printf("failure posix_spawn [Error NUMBER = %d]\n",errno); +00099 unlinkResult=unlink(fifoFileName); +00100 if(unlinkResult!=0) +00101 { +00102 printf("failure posix_spawn [Error NUMBER = %d]\n",errno); +00103 } +00104 PressKey(); +00105 return EXIT_FAILURE; +00106 } +00107 else +00108 { +00110 int fifoFd = open(fifoFileName,O_RDONLY); +00112 if(fifoFd == -1) +00113 { +00115 Error("*** failure FIFO Open ***"); +00116 PressKey(); +00117 return EXIT_FAILURE; +00118 } +00119 else +00120 { +00122 char buffer[100]; +00123 int nbytes; +00124 memset(buffer,0,sizeof(buffer)); +00126 nbytes = read(fifoFd,buffer,sizeof(buffer)); +00127 printf("\nBytes Received=%d, Message Received from fifochild using [FIFO]=%s",nbytes,buffer); +00129 (void)close(fifoFd); +00130 } +00132 childProcessStream = popen(popenExecFileName,"r"); +00134 if(childProcessStream == NULL) +00135 { +00136 Error("\n Failure to create child process with popen()"); +00137 PressKey(); +00138 return EXIT_FAILURE; +00139 } +00140 else +00141 { +00143 char buffer[100]; +00145 int nbytes; +00147 childProcessFD = fileno(childProcessStream); +00148 memset(buffer,0,sizeof(buffer)); +00149 printf("\n\nWaiting for message from Child[popen()]\n"); +00151 nbytes = read(childProcessFD,buffer,sizeof(buffer)); +00152 printf("Bytes Received=%d, Message Received from ipcchild using[popen()]=%s\n[ok]\n",nbytes,buffer); +00154 pclose(childProcessStream); +00155 } +00157 (void)waitpid(fifoChildPid,NULL,0); +00159 unlinkResult=unlink(fifoFileName); +00160 if(unlinkResult!=0) +00161 { +00162 Error("Unlink error"); +00163 } +00164 } +00165 printf("Press any key to exit..."); +00166 PressKey(); +00167 return EXIT_SUCCESS; +00168 } +