os_kernel_lab/related_info/lab7/ipc/pipe-ex2.c

44 lines
1.2 KiB
C
Raw Normal View History

/*
* From
* [url]http://www.crasseux.com/books/ctutorial/Programming-with-pipes.html[/url]
* but changed to use fgets() instead of the GNU extension getdelim()
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *ps_pipe;
FILE *grep_pipe;
int bytes_read;
char buffer[100]; /* could be anything you want */
/* Open our two pipes
ls -a | grep pipe*
*/
ps_pipe = popen("/bin/ls -a", "r");
grep_pipe = popen("/bin/grep 'pipe*'", "w");
/* Check that pipes are non-null, therefore open */
if ((!ps_pipe) || (!grep_pipe)) {
fprintf(stderr, "One or both pipes failed.\n");
return EXIT_FAILURE;
}
bytes_read = 0;
while (fgets(buffer, sizeof(buffer), ps_pipe)) {
fprintf(grep_pipe, "%s", buffer);
bytes_read += strlen(buffer);
}
printf("Total bytes read = %d\n", bytes_read);
/* Close ps_pipe, checking for errors */
if (pclose(ps_pipe) != 0) {
fprintf(stderr, "Could not run 'ls', or other error.\n");
}
/* Close grep_pipe, cehcking for errors */
if (pclose(grep_pipe) != 0) {
fprintf(stderr, "Could not run 'grep', or other error.\n");
}
/* Exit! */
return 0;
}