概述
初学linux C库,能见到它的原型如下:
int fprintf(FILE*stream,const char *format,...)
fprint(stderr,"Cannot open output file.n");
见百度文库“fprintf详解”:
- stdin
标准输入 键盘 - stdout
标准输出 屏幕 - stderr
标准错误 屏幕 - stdprn
标准打印机 LPT1端口 - stdaux
标准串行设备 COM1端口
extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;
printf(...)实际上相当于fprintf(stdout,...),这也是我们为什么不推荐使用它的原因。在输出调试信息的时候,我们推荐使用fprintf(stderr,...),或者使用某个指定的文件流
fprintf(some_stream,...)。
利用Shell的I/O重定向(这个就够用了)
简单的些log方法可以通过shell的I/O重定向机制来实现,比如下面的代码:
#include<stdio.h>
int main()
{
fprintf(stdout,"This is a standard output info!n");
fprintf(stderr,"This is a standard error output info!n");
return 0;
}
在默认条件下,编译运行的结果总是打印信息输出在屏幕上:
$gcc fprint.c -o fprint
$./fprint
This is a standard output info!
This is a standard error output info!
这是因为默认情况下,shell所打开的stdout和stderr设备都是显示屏幕。不过我们可以通过shell的重定向功能来将打印信息写到文件中去。比如:
$./fprint>output.log【这个语法可以在C编程语言第二版书摘的输入输出章节可见,用于把输出定向到文件】
This is a standard error output info!
$cat output.log
This is a standard output info!
这样,我们把stdout的输出写到了文件output.log中,不过stderr的输出还是在屏幕上。如何重定向stderr呢?着需要用到shell定义的文件描述符。在shell下stdin,stdout和stderr的文件描述符分别是0,1和2,我们可以用下面的方法重定向:
$./fprint>output.log2>error.log
$cat output.log
This is a standard output info!
$cat error.log
This is a standard error output info!
$
$./fprint>output.log2>&1
$cat output.log
This is a standard error output info!
This is a standard output info!
其中./fprint >output.log 2>error.log分别将stdout 和 stderr 的输入写到文件output.log 和error.log中,而./fprint>output.log2>&1则表示将stderr的输出追加到stdout的文件output.log中(结果是output.log 中既有 stdout输出 也有stderr输出)。
一些常用的shell I/O 语法如下:
cmd > file 把 stdout 重定向到 file 文件中
cmd>> file 把 stdout 重定向到 file文件中(追加)
cmd1 > file 把 stdout 重定向到 file 文件中
cmd> file2>&1
cmd 2>file 把 stderr重定向到file 文件中
cmd 2>>file 把 stderr重定向到file文件中(追加)
cmd>>file2>&1
在平时简单的调试中,我们可以灵活利用这些方法来快速得到log文件。
用freopen()进行重定向
有时候我们要求在程序中能够控制标准流的重定向,这是可以利用标准C库函数freopen().
freopen()的函数原型如下:
下面的代码用来测试用函数freopen()重定向stderr:
#include<stdio.h>
int main()
{
if(freopen("err.log",w,stderr)==NULL)
fprintf(stderr,"error redirecting stderrn");
fprintf(stdout,"This is a standard output info!n");
fprintf(stderr,"This is a standard error output info!n");
fclose(stderr);
return 0;
}
$gcc print_log.c -o print_log
$./print_log
This is a standard output info!
$cat err.log
This is a standard error output info!
可见第八行打印到stderr的信息被重定向到了err.log文件中,而第七行stdout的打印星系则还是输出到了屏幕上。
原文
http://blog.sina.com.cn/s/blog_6ddef98f0100vm8x.html
最后
以上就是兴奋故事为你收集整理的关于LINUX C库函数 中的 fprintf的全部内容,希望文章能够帮你解决关于LINUX C库函数 中的 fprintf所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复