R
Rob Hoelz
Hello everyone,
I've been trying to roll my own popen(), but I've run into problems.
Would anyone care to look at my code and tell me what I'm doing wrong?
Here's my code:
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
FILE *mypopen(const char *file, const char **argv)
{
int pid;
int filedes[2];
if(pipe(filedes))
return NULL;
pid = fork();
if(pid == -1) {
return NULL;
} else if(! pid) {
close(filedes[1]);
dup2(filedes[0], fileno(stdout));
execvp(file, argv);
} else {
close(filedes[0]);
return fdopen(filedes[1], "r");
}
}
int main(int argc, char **argv)
{
FILE *file;
const char *args[3] = {"hg", "status", NULL};
int inchar;
file = mypopen("hg", args);
if(! file) {
return 1;
} else {
inchar = fgetc(file);
while(inchar != EOF) {
fputc(inchar, stdout);
inchar = fgetc(file);
}
fclose(file);
}
return 0;
}
Thanks,
Rob Hoelz
I've been trying to roll my own popen(), but I've run into problems.
Would anyone care to look at my code and tell me what I'm doing wrong?
Here's my code:
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
FILE *mypopen(const char *file, const char **argv)
{
int pid;
int filedes[2];
if(pipe(filedes))
return NULL;
pid = fork();
if(pid == -1) {
return NULL;
} else if(! pid) {
close(filedes[1]);
dup2(filedes[0], fileno(stdout));
execvp(file, argv);
} else {
close(filedes[0]);
return fdopen(filedes[1], "r");
}
}
int main(int argc, char **argv)
{
FILE *file;
const char *args[3] = {"hg", "status", NULL};
int inchar;
file = mypopen("hg", args);
if(! file) {
return 1;
} else {
inchar = fgetc(file);
while(inchar != EOF) {
fputc(inchar, stdout);
inchar = fgetc(file);
}
fclose(file);
}
return 0;
}
Thanks,
Rob Hoelz