User Tools

Site Tools


operatingsystemclass_2freport1

pipe.h

#include <fcntl.h> #include <limits.h> #define MAXLINE 40 #define LINES 11

mainpipe.c

#include “pipe.h”

void client(int, int), server(int, int);

int main () {

  int pipe1[2], pipe2[2];
  pid_t childpid;
  pipe(pipe1);
  pipe(pipe2);
  if((childpid = fork()) != 0) {
      close(pipe1[1]);
      close(pipe2[0]);
      server(pipe1[0], pipe2[1]);
      exit(EXIT_SUCCESS);
  }
  close(pipe1[0]);
  close(pipe2[1]);
  client(pipe2[0], pipe1[1]);
  waitpid(childpid, NULL, 0);
  exit(EXIT_SUCCESS);

}

client.c

#include “pipe.h”

void print_array(char *d[], int);

void client(int readfd, int writefd) {

  int i=0,j;
  size_t len;
  ssize_t n;
  char buff[MAXLINE];
  char word[LINES][MAXLINE];
  FILE *infile;
  FILE *outfile;
  printf("input a file name : ");

/* fgets(buff, MAXLINE, stdin);*/ /* len = strlen(buff);*/ /* if (buff[len - 1] =='\n')*/ /* len–;*/

/* infile = fopen(“unsorted”, “r”);*/

  infile = freopen("unsorted", "r",stdin);
  outfile = fopen("sorted", "w");
  
  while(fgets(word[i], MAXLINE, infile) != (char*) NULL) {
      word[i][strlen(word[i])-1] = '\0';
      i++;
  }
  printf("Before Sorted ... in client-side \n");
  for(i = 0;i < LINES;i++){
      printf("%d", len);
      for( j = 0; j <= 10; j++)
          buff[j] = word[i][j];
      len = strlen(word[i]);
      buff[len] = '\n';
      write(writefd, buff, len+1);
  }
  printf("\nAfter Sorted ... in client-side \n");
  for (i =0; i < LINES ; i++){
      n = read(readfd, buff, MAXLINE);

/* write(STDOUT_FILENO, buff, n);*/

      fwrite(buff,n,1,outfile);

/* len = strlen(buff);*/ /* for( j = 0; j ⇐ len; j++)*/

          word[i][j]= buff[j];
  }

}

void print_array(char *d[], int n) {

  int i;
  for(i=0;i<n;i++) 
      puts(d[i]);

}

server.c

#include “pipe.h”

void err_quit(char *msg);

void server(int readfd, int writefd) {

  int fd;
  ssize_t n;
  char buff[MAXLINE + 1];
  char data[LINES][MAXLINE], *ptr[LINES];
  int i = 0, j;
  size_t len ;
  for (i =0; i < LINES ; i++){
      n = read(readfd, buff, MAXLINE);
      write(STDOUT_FILENO, buff, n);
      len = strlen(buff);
      for( j = 0; j <= len; j++)
          data[i][j]= buff[j];

/* ptr[i] = data[i];*/

  }
  bubble_sort(data, LINES);

/* for (i =0; i < LINES ; i++){*/ /* data[i] = ptr[i];*/ /* printf(“ptr() %s”, ptr[i]);*/ /* }*/

  for(i = 0;i < LINES;i++){

/* printf(“%d”, len);*/

      for( j = 0; j <= 10; j++)
          buff[j] = data[i][j];
      len = strlen(data[i]);
      buff[len] = '\n';
      write(writefd, buff, len);
  }

}

void err_quit( char *msg) {

  perror(msg);
  exit(EXIT_FAILURE);

}

bubble.c

#include “pipe.h”

void bubble_sort(char data[][MAXLINE], int lim) {

  int i, eff_size, maxpos =0;
  char tmp[MAXLINE];
  for (eff_size = lim ; eff_size > 1; eff_size--) {
      for ( i = 0 ; i < eff_size ; i++)
          if (strcmp(data[i], data[maxpos]) > 0)
              maxpos = i;
      strcpy(tmp, data[maxpos]);
      strcpy(data[maxpos], data[eff_size-1]);
      strcpy(data[eff_size-1], tmp);
  }

}

operatingsystemclass_2freport1.txt · Last modified: 2018/07/18 14:10 by 127.0.0.1