Если это не слишком хлопотно, вы можете, но думаю, вы знаете, сделать что-то вроде;
Можно немного украсить, но :
#include <stdio.h>
#include <stdarg.h>
#define MAX_LINE 1024
void dbg_fprnt(FILE *fh, char *fmt, ...)
{
char buf[MAX_LINE];
char inf[MAX_LINE] = {0};
va_list args;
if (fmt && *fmt) {
va_start(args, fmt);
va_end(args);
vsprintf(inf, fmt, args);
}
buf[0] = '\n';
buf[1] = '\0';
if (ferror(fh)) {
fprintf(stderr, " * ERR, ferror() --- \n");
} else if (fh == NULL) {
fprintf(stderr,
" * DBG PRNT ERR;; Trying to print from NULL ---\n");
/* else if (and so forth) */
} else {
if (fgets(buf, MAX_LINE, fh) == NULL) {
perror(" * ERR DBG PRNTF FGETS, --");
}
}
printf("%-15s FC:: %s", inf, buf);
}
int main(void)
{
char *fn = "lorem_ipsum";
FILE *fh;
if ((fh = fopen(fn, "r")) == NULL) {
fprintf(stderr,
"Unable to open '%s' for read.\n",
fn);
return 1;
}
setbuf(stdout, NULL);
dbg_fprnt(fh, "SOME LINE: %d", 123);
dbg_fprnt(fh, "%s", "SASA");
dbg_fprnt(fh, "");
dbg_fprnt(fh, NULL);
dbg_fprnt(fh, "%s %d !", "Woot", 33);
dbg_fprnt(fh, "@%d :::", __LINE__);
fclose(fh);
dbg_fprnt(fh, "@%d :::", __LINE__);
return 0;
}
Пример вывода:
./fe
SOME LINE: 123 FC:: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
SASA FC:: tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
FC:: quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
FC:: consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
Woot 33 ! FC:: cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
@52 ::: FC:: proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
* ERR DBG PRNTF FGETS, --: Bad file descriptor
@54 ::: FC::