![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* calc.c - calculator front-end which uses bc for everything */
/* This is a very simple calculator which uses the external bc
command to do everything. It opens a pipe to bc, reads a command
in, passes it to bc, and exits. */
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void) {
char buf[1024];
FILE * bc;
int result;
/* open a pipe to bc, and exit if we fail */
bc = popen("bc", "w");
if (!bc) {
perror("popen");
return 1;
}
/* prompt for an expression, and read it in */
printf("expr: "); fflush(stdout);
fgets(buf, sizeof(buf), stdin);
/* send the expression to bc for evaluation */
fprintf(bc, "%s\n", buf);
fflush(bc);
/* close the pipe to bc, and wait for it to exit */
result = pclose(bc);
if (!WIFEXITED(result))
printf("(abnormal exit)\n");
return 0;
}