Ich möchte stdout und stderr zu einer Funktion umleiten und einen einfachen Code schreiben. fprintf ist in Ordnung, aber wenn ich printf ohne \ r, Stream an Terminal übergeben!redirect stdout/stderr in C
#include <stdio.h>
static ssize_t file_write(void *c, const char *buf, size_t size)
{
FILE * pFile;
pFile = fopen ("output.txt","w");
fprintf(pFile, "%s", buf);
fclose (pFile);
return size;
}
void redirect()
{
FILE *stream;
stream=fopencookie(NULL, "w", (cookie_io_functions_t) {(ssize_t) 0, file_write, 0, 0});
setbuf(stdout, NULL);
stdout = stream;
setbuf(stderr, NULL);
stderr = stream;
}
int main()
{
redirect();
fprintf(stderr,"1-stderr test\n");
fprintf(stdout, "2-stdout test\n");
printf("3-printf with r test\n\r");
printf("4-printf without r test\n");
return 0;
}
Datei "output.txt":
1-Stderr Test
2-stdout Test
3-printf mit r Test
Klemmenausgang:
$ ./sample
4-printf ohne r Test
1. Sortieren Sie den Einzug 2. Überprüfen Sie den Rückgabewert von 'fopen' 3.' fprintf (pFile, buf); '- lassen Sie hoffen, dass' buf' kein '%' darin enthält! –
Sie verwenden 'buf' als Formatzeichenfolge. Dies wird ziemlich schrecklich scheitern, wenn es '%' Zeichen enthält. Verwenden Sie 'fprintf (pFile,"% s ", buf)' oder rufen Sie 'fwrite' anstelle von' fprintf' auf. –
Sie können auch 'fputs' anstelle von' fprintf' aufrufen. Das könnte am einfachsten sein. –