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);
}
}