Table of Contents
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); }
}