Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I\'m trying to make a program where the parent reads from a file some operations

ID: 3740596 • Letter: I

Question

I'm trying to make a program where the parent reads from a file some operations, passes them to the child with a pipe, and the child makes all the operations with bc. Later on, the child has to pass it back to the parent and parents will print.

I wrote the code. The main problem is though the parent is reading all the lines from the file and pass it to child but when I am getting output of bc being printed by the parent I am not getting output of all the lines. here is my code.

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/wait.h>

#include <sys/stat.h>

#include <unistd.h>

main(int argc, char *argv[])

{

int des,bytes;

int op;

char buffer[1000];

int i, rc;

int stdin_pipe_fds[2], stdout_pipe_fds[2];

char buf[100];

pipe(stdin_pipe_fds);

pipe(stdout_pipe_fds);

  

rc = fork();

if (rc == -1)

{

printf("fork failed ");

exit(-1);

}

if (rc == 0) /* child */

{

close(stdin_pipe_fds[1]);

close(stdout_pipe_fds[0]);

close(0);

dup(stdin_pipe_fds[0]);

close(stdin_pipe_fds[0]);

close(1);

dup(stdout_pipe_fds[1]);

close(stdout_pipe_fds[1]);

execlp("/usr/bin/bc", "usr/bin/bc","-l", NULL);

  

exit(0);

}

/* parent */

close(stdin_pipe_fds[0]);

close(stdout_pipe_fds[1]);

des=open("myfile.txt",O_RDONLY);

while ((bytes=read(des,buffer,sizeof(buffer)))>0){

op=write(stdin_pipe_fds[1], buffer, bytes);

buffer[op]=0;

printf("in: %s ",buffer);

}

if ((i = read(stdout_pipe_fds[0],buf,100)) > 0)

{

buf[i] = '';

printf("bc: %s ",buf);

}

close(stdin_pipe_fds[1]);

close(stdout_pipe_fds[0]);

  

}




here is the text of the file:

print "ABC DEF "

a = 765 + 8000

print "a is ", a, " "

44+55

22*5+1

8/3

a = 33

b = 22

c = a * 3 + b

c


Can you tell me in my code which things I have to change to get output of all the lines after bc operations

Explanation / Answer

in: print "ABC DEF "

a = 765 + 8000

print "a is ", a, " "

44+55

22*5+1

8/3

a = 33

b = 22

c = a * 3 + b

c

bc: ABC
DEF
a is 8765
99
111
2.66666666666666666666
121

Hi.. looks like it is printing whatever you like the program to print. May be you are misinterpreting what 'bc' command does.

for example if you open bc in linux terminal and type each of the below mentioned lines one by one

print "ABC DEF "

will show below output

ABC

DEF

a = 765 + 8000

print "a is ", a, " "

will show

a is 8765

44+55

will show

99

22*5+1

will show

111

8/3

will show

2.66666

a = 33

b = 22

c = a * 3 + b

c

will show

121

Hence, your program is actually correct.