numaralı bir arabelleğe yönlendir. Daha önce sorulan sorulara baktım. Ve stderr'in şu anki değerini elde etmek için bu kodu buldum, bir dirseğe yeniden yönlendir ve stderr'i yeniden ata. Bu kod.strol öğesini c
Stderr'in buff'a yeniden yönlendirilmesi gerçekleşmiyor.
ls: cannot access system: No such file or directory
hellow world
error from buffer
kaynak kod şuna benzer:: Ben kodu çalıştırmak denediğimde ekranda görebilirsiniz
#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();
}
Bu kod yönlendirmeleri ile stdout (mantık aynı olurdu yeniden doğrudan bir geçici dosya (Yaklaşım 1'e) stderr ben çatallı vermemekle beraber aşağıda önerilen ve dosyaya yazmak için bir çocuk süreç)
void switchStdout(const char *newStream)
{
fflush(stdout);
fgetpos(stdout, &pos);
fd = dup(fileno(stdout));
freopen(newStream, "w", stdout);
}
oluşturdu olarak 0void revertStdout()
{
fflush(stdout);
dup2(fd, fileno(stdout));
close(fd);
clearerr(stdout);
fsetpos(stdout, &pos);
}
void main(){
switchStdout("/tmp/err.txt");
printf("Hello world");
revertStdout();
}
char * buf; 'ne verildi düşünüyorsunuz? Sizeof (buf); 'nedir? –