Changes between Initial Version and Version 1 of shunfa/2011/0811


Ignore:
Timestamp:
Aug 11, 2011, 3:51:34 PM (13 years ago)
Author:
shunfa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • shunfa/2011/0811

    v1 v1  
     1= 別人寫的pipe程式 =
     2 
     3 * pipe函式用一個int[]作參數,int[] fd中fd[0]用於讀,fd[1]用於寫
     4
     5{{{
     6#!c
     7#include <stdio.h>
     8#include <unistd.h>
     9#include <stdlib.h>
     10#include <string.h>
     11#include <sys/types.h>
     12
     13int main()
     14{
     15  int pipe1_fd[2], pipe2_fd[2];
     16
     17      char * parent_talks[] = {"Hi, my baby","Can you tell daddy date and time?","Daddy have to leave here, bye!",NULL};
     18      char * child_talks[] = {"Hi, daddy","Sure,","Bye!",NULL};
     19
     20      char parent_buf[256], child_buf[256];
     21      char * parent_ptr, * child_ptr;
     22
     23      int i,j, len;
     24      int child_status;
     25      time_t curtime;
     26
     27  if(pipe(pipe1_fd) < 0)
     28  {
     29   printf("pipe1 create error\n");
     30         return -1;
     31         }
     32
     33  if(pipe(pipe2_fd) < 0)
     34         {
     35       printf("pipe2 create error\n");
     36       return -1;
     37         }
     38
     39      if(fork() == 0)   //child
     40         {
     41       //pipe1_fd[0] is used to read, pipe2_fd[1] is used to write
     42         close(pipe1_fd[1]);
     43         close(pipe2_fd[0]);
     44
     45         i = 0;
     46         child_ptr = child_talks[i];
     47         while(child_ptr != NULL)
     48                 {
     49          len = read(pipe1_fd[0],child_buf,255);
     50            child_buf[len] = '\0';
     51            printf("Parent: %s\n",child_buf);
     52
     53            if(i == 1)
     54    {
     55             time(&curtime);
     56               len = sprintf(child_buf, "%s %s", child_ptr, ctime(&curtime));
     57               child_buf[len-1] = '\0';
     58               write(pipe2_fd[1],child_buf,strlen(child_buf));
     59                         }
     60            else
     61    {
     62             write(pipe2_fd[1],child_ptr,strlen(child_ptr));
     63                         }
     64           
     65    child_ptr = child_talks[++i];
     66                 }
     67
     68         close(pipe1_fd[0]);
     69         close(pipe2_fd[1]);
     70         exit(0);
     71         }
     72      else   //parent
     73  {
     74       //pipe1_fd[1] is used to write, pipe2_fd[0] is used to read
     75         close(pipe1_fd[0]);
     76         close(pipe2_fd[1]);
     77
     78         j = 0;
     79         parent_ptr = parent_talks[j];
     80         while(parent_ptr != NULL)
     81   {
     82          write(pipe1_fd[1],parent_ptr,strlen(parent_ptr));
     83            len = read(pipe2_fd[0],parent_buf,255);
     84            parent_buf[len] = '\0';
     85            printf("Child: %s\n", parent_buf);
     86            parent_ptr = parent_talks[++j];
     87                 }
     88
     89         close(pipe1_fd[1]);
     90         close(pipe2_fd[0]);
     91         wait(&child_status);
     92         exit(0);
     93         }
     94}
     95
     96}}}
     97