Ich habe die vorherigen Fragen, die gefragt wurden, angeschaut. Und ich habe diesen Code entwickelt, um den aktuellen Wert von stderr zu erhalten, ihn an einen buf umzuleiten und stderr neu zuzuweisen. Das ist Code.umleiten stderr zu einem Puffer in c
Die Umleitung des stderr zum Buff findet nicht statt. Ich habe dies auf dem Bildschirm sehen kann, wenn ich versuche, den Code auszuführen:
ls: cannot access system: No such file or directory
hellow world
error from buffer
Der Quellcode sieht wie folgt aus:
#include<stdio.h>
static int fd;
static fpos_t pos;
char *buf;
void closeerr()
{
fflush(stderr);
fgetpos(stderr, &pos);
fd = dup(fileno(stderr));
buf =(char *)calloc(sizeof(char *),1024);
stderr = fmemopen(buf, sizeof(buf), "w");
}
void reverterr()
{
fflush(stderr);
dup2(fd, fileno(stderr));
close(fd);
clearerr(stderr);
fsetpos(stderr, &pos);
}
void main()
{
closeerr();
printf("hellow world");
system(" ls -l system"); // this is where I see the error msg
printf("error from buffer %s",buf);
reverterr();
}
Dieser Code erneut anweist stdout (die Logik wäre gleich Re-direct stderr) in eine temporäre Datei (Ansatz 1 wie unten vorgeschlagen, obwohl ich nicht gegabelt haben, und ein Kind-Prozess erstellt, um in die Datei zu schreiben)
void switchStdout(const char *newStream)
{
fflush(stdout);
fgetpos(stdout, &pos);
fd = dup(fileno(stdout));
freopen(newStream, "w", stdout);
}
void revertStdout()
{
fflush(stdout);
dup2(fd, fileno(stdout));
close(fd);
clearerr(stdout);
fsetpos(stdout, &pos);
}
void main(){
switchStdout("/tmp/err.txt");
printf("Hello world");
revertStdout();
}
Gegeben 'char * buf;' was, was denkst du 'sizeof (buf);' ist? –