pirntf 和fprintf and 全局变量errno

 

一 printf 和fprintf 的关系
1 printf()
#include <stdio.h>
int printf( const char *format, … );

printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.对于输出格式,有
%c 字符
%d 带符号整数
%i 带符号整数
%e 科学计数法, 使用小写”e”
%E 科学计数法, 使用大写”E”
%f 浮点数
%g 使用%e或%f中较短的一个
%G 使用%E或%f中较短的一个
%o 八进制
%s 一串字符 //后面对应的参数为字符串指针
%u 无符号整数
%x 无符号十六进制数, 用小写字母
%X 无符号十六进制数, 用大写字母
%p 一个指针
%n 参数应该是一个指向一个整数的指针

STDOUT是printf默认的输出设备,因为一个进程开始时候,默认是打开三个文件,这三个文件是STDIN,STDERR,STDOUT.
printf()的返回值是打印的字符数,如果发生错误则返回一个负值.
2 fprintf()
#include <stdio.h> 
int fprintf( FILE *stream, const char *format, … );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如
    char name[20] = “Mary”;
    FILE *out;
    out = fopen( “output.txt”, “w” ); 
    if( out != NULL ) 
    fprintf( out, “Hello %s\n”, name );

对于其输出格式参数,和printf()一样.
fprintf()和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
在有些地方,有这样的定义:printf(…)=fprintf(stdout,…).
二 errno全局变量
    为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在。因此可以使用perror(const char *format);来打印出错信息,同时系统会打印出它相应的错误返回码.errno不同数值所代表的错误消息定义在errno.h中,可以通过命令”man 3 errno”来察看它们。需要注意的是,errno的值只在函数发生错误时设置,如果函数不发生错误,errno的值就无定义,并不会被置为0。另外,在处理errno前最好先把它的值存入另一个变量,因为在错误处理过程中,即使像printf()这样的函数出错时也会改变errno的值。

来自:http://dev.firnow.com/course/6_system/linux/Linuxjs/200871/129591.html

www.firnow.com    时间 : 2008-07-01  作者:佚名

 

发表评论

电子邮件地址不会被公开。