23,120
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h> /* printf() */
#include <stdlib.h> /* exit() */
#include <unistd.h> /* popen() */
#include <errno.h> /* errno */
#include <string.h> /* strerror() */
static void open_read(char *pname);
static void sig_child(int signo);
int main(int argc, char *argv[])
{
int i;
int ln;
ln = atoi(argv[2]);
signal(SIGCHLD, sig_child);
for(i = 0; i < ln; i++) {
open_read(argv[1]);
}
exit(EXIT_SUCCESS);
return 0;
}
static void open_read(char *pname)
{
int i;
char buf[BUFSIZ];
FILE *fp;
int r;
if ((fp = popen(pname, "r")) == NULL) {
perror("popen");
exit(EXIT_FAILURE);
}
for(i = 0; i < BUFSIZ; i++) {
if ((r = read(fileno(fp), buf, 1)) < 0) {
perror("error read");
exit(1);
} else if (r > 0) {
(void)fprintf(stdout, "read: %s\n", buf);
} else {
(void)fprintf(stdout, "read finished\n");
break;
}
}
if (pclose(fp) < 0) {
perror("pclose");
exit(EXIT_FAILURE);
}
}
static void sig_child(int signo)
{
fprintf(stderr, "receiving signal child\n");
}