diff -r ebc84c812384 -r 46218c8b8afa Symbian3/PDK/Source/GUID-383C128C-15EB-4C64-9A1F-F1EA826323D0.dita --- a/Symbian3/PDK/Source/GUID-383C128C-15EB-4C64-9A1F-F1EA826323D0.dita Thu Mar 11 15:24:26 2010 +0000 +++ b/Symbian3/PDK/Source/GUID-383C128C-15EB-4C64-9A1F-F1EA826323D0.dita Thu Mar 11 18:02:22 2010 +0000 @@ -1,122 +1,122 @@ - - - - - -Parent -and Child IPC Using Named Pipes or FIFOs -

An alternative approach to using the popen() function -is to use named pipes, or FIFOs. The advantage of using them over the popen() mechanism -is that they allow the code in both the parent and child processes to continue -to use file descriptors for communication rather than streams (and avoid modification -to the stdin()/stdout() streams of the child -process).

-

In addition, since each created FIFO is referenced as a file in the file -system, FIFOs allow for more complicated IPC schemes than those offered by -the popen() function, for example, inter-child process -communication. For more information about the use of FIFOs, see http:\\www.opengroup.org.

-

Parent process P.I.P.S. example using FIFOs

-

The following code shows how FIFOs can be used in P.I.P.S. by the parent -process.

-int main(int argc, char *argv[]) -{ - char fifoFileName[] = "/root/PortDoc/Example2_c/Symbian/fifofile"; - - int fifoResult = mkfifo(fifoFileName,S_IXGRP); - - if(fifoResult == -1) - { - //FIFO creation failure. - printf("\n*** failure mkfifo ***\n"); - - return EXIT_FAILURE; - } - else - { - //FIFO creation successful. - - //Spawn the child process. - pid_t Childpid; - char execFileName[] = "/root/PortDoc/Example2_c/Symbian/ChildProg"; - int RetVal= posix_spawn(&Childpid,execFileName,NULL,NULL,NULL,NULL); - - if(RetVal != 0) - { - printf("\n*** failure posix_spawn ***\n"); - - return EXIT_FAILURE; - } - else - { - //Open the FIFO. Parent reads from the FIFO - int ReadFifoFd = open(fifoFileName,O_RDONLY); - - if(ReadFifoFd == -1) - { - //Failed to open the Fifo - printf("\n*** failure Fifo Open ***\n"); - - return EXIT_FAILURE; - } - else - { - //create a receive buffer and clear - char RxBuffer[100]; - memset(RxBuffer,0,sizeof(RxBuffer)); - - //Wait for data from the child process. Child sends a string. - int nbytes = read(ReadFifoFd,RxBuffer,sizeof(RxBuffer)); - - printf("\nMessage Received by Parent=%s",RxBuffer); - - //close the FIFO - (void)close(ReadFifoFd); - } - - //wait for the child process to finish - (void)waitpid(Childpid,NULL,0); - - //unlink the FIFO - unlink(fifoFileName); - } - } - return EXIT_SUCCESS; -} - -

Child process P.I.P.S. example using FIFOs

-

The following code shows how FIFOs can be used in P.I.P.S. by the child -process.

-int main(int argc, char *argv[]) -{ - char fifoFileName[] = "/root/PortDoc/Example2_c/Symbian/fifofile"; - - //Open the FIFO. child writes to parent - int WriteFifoFd = open(fifoFileName,O_WRONLY); - - if(WriteFifoFd == -1) - { - //Failed to open the Fifo - printf("\n*** child failure Fifo Open ***\n"); - return EXIT_FAILURE; - } - else - { - //create a message to send. - char TxMsg[] = "Hello Parent\n"; - - //Wait for data from the child process. Child sends a string. - write(WriteFifoFd,TxMsg,sizeof(TxMsg)); - - //close the FIFO - (void)close(WriteFifoFd); - } - return EXIT_SUCCESS; -} - + + + + + +Parent +and Child IPC Using Named Pipes or FIFOs +

An alternative approach to using the popen() function +is to use named pipes, or FIFOs. The advantage of using them over the popen() mechanism +is that they allow the code in both the parent and child processes to continue +to use file descriptors for communication rather than streams (and avoid modification +to the stdin()/stdout() streams of the child +process).

+

In addition, since each created FIFO is referenced as a file in the file +system, FIFOs allow for more complicated IPC schemes than those offered by +the popen() function, for example, inter-child process +communication. For more information about the use of FIFOs, see http:\\www.opengroup.org.

+

Parent process P.I.P.S. example using FIFOs

+

The following code shows how FIFOs can be used in P.I.P.S. by the parent +process.

+int main(int argc, char *argv[]) +{ + char fifoFileName[] = "/root/PortDoc/Example2_c/Symbian/fifofile"; + + int fifoResult = mkfifo(fifoFileName,S_IXGRP); + + if(fifoResult == -1) + { + //FIFO creation failure. + printf("\n*** failure mkfifo ***\n"); + + return EXIT_FAILURE; + } + else + { + //FIFO creation successful. + + //Spawn the child process. + pid_t Childpid; + char execFileName[] = "/root/PortDoc/Example2_c/Symbian/ChildProg"; + int RetVal= posix_spawn(&Childpid,execFileName,NULL,NULL,NULL,NULL); + + if(RetVal != 0) + { + printf("\n*** failure posix_spawn ***\n"); + + return EXIT_FAILURE; + } + else + { + //Open the FIFO. Parent reads from the FIFO + int ReadFifoFd = open(fifoFileName,O_RDONLY); + + if(ReadFifoFd == -1) + { + //Failed to open the Fifo + printf("\n*** failure Fifo Open ***\n"); + + return EXIT_FAILURE; + } + else + { + //create a receive buffer and clear + char RxBuffer[100]; + memset(RxBuffer,0,sizeof(RxBuffer)); + + //Wait for data from the child process. Child sends a string. + int nbytes = read(ReadFifoFd,RxBuffer,sizeof(RxBuffer)); + + printf("\nMessage Received by Parent=%s",RxBuffer); + + //close the FIFO + (void)close(ReadFifoFd); + } + + //wait for the child process to finish + (void)waitpid(Childpid,NULL,0); + + //unlink the FIFO + unlink(fifoFileName); + } + } + return EXIT_SUCCESS; +} + +

Child process P.I.P.S. example using FIFOs

+

The following code shows how FIFOs can be used in P.I.P.S. by the child +process.

+int main(int argc, char *argv[]) +{ + char fifoFileName[] = "/root/PortDoc/Example2_c/Symbian/fifofile"; + + //Open the FIFO. child writes to parent + int WriteFifoFd = open(fifoFileName,O_WRONLY); + + if(WriteFifoFd == -1) + { + //Failed to open the Fifo + printf("\n*** child failure Fifo Open ***\n"); + return EXIT_FAILURE; + } + else + { + //create a message to send. + char TxMsg[] = "Hello Parent\n"; + + //Wait for data from the child process. Child sends a string. + write(WriteFifoFd,TxMsg,sizeof(TxMsg)); + + //close the FIFO + (void)close(WriteFifoFd); + } + return EXIT_SUCCESS; +} +
\ No newline at end of file