c语言中的数据流

来源:互联网 发布:itools pro mac破解版 编辑:程序博客网 时间:2024/06/11 02:03
stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据流。什么是数据流呢(stream)?我们知道,一个程序要运行,需要有输入、输出,如果出错,还要能表现出自身的错误。这是就要某个地方读入数据、将数据输出到某个地方,这就够成了数据流。
因此,一个进程初期所拥有的这么三个数流,就分别是输出、标准输入和标准错误,分别用stdout, stdin, stderr来表示。对于这三个数据流来说,默认是表现在用户终端上的一般stdout, stderr被定位到屏幕比如我们在c中使用fprintf:fprintf(stdout,"hello world!n");屏幕上将打印出"hello world!"来。stdin被定位到键盘。当然他们也可以重新定位。


流的重定向

实现函数:FILE *freopen(const char *filename,const char *type, FILE *stream);此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。

这个例子实现了从stdout到一个文本文件的重定向。即,把输出到屏幕的文本输出到一个文本文件中。
#include <stdio.h>
int main()
{
int i;
if (freopen("D:OUTPUT.txt", "w", stdout)==NULL)
fprintf(stderr, "error redirecting\stdout\n");
for(i=0;i<10;i++)
printf("%3d",i);
printf("\n");
fclose(stdout);
return 0;
}
在VC++6.0中运行一下,你会发现,十个数输出到了D盘下文本文件OUTPUT.txt中。


fprintf()函数

int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.


int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.
fseek(in,-1L,1);   -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1,  -1L -- 文件指针回退1个字节int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
  SEEK_END: 文件结尾
  其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
  简言之:
  fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
  fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
    fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
参考资料:http://hi.baidu.com/yesreallove/blog/item/0bb05516a3420143f2de3213.html
  返回值: 成功,返回0,否则返回其他值。

一个例子:

c语言 分解质因数算法#include<stdio.h>#include<math.h>int main() {int i,b;long long in; /*采用64位整型,以便输入更大的数*/freopen("F://1.txt","r",stdin);freopen("F://2.txt","w",stdout);while(scanf("%lld",&in)!=EOF) { /*在F://1.txt中输入x个数N(N>=2)以换行符或空格符隔开,当没有输入时循环会自动结束*/b=0; /*用于标记是否是第一个质因数,第一个质因数在输出时前面不需要加空格*/for(i=2;in!=1;i++)if(in%i==0) {in/=i;b?printf(" %d",i):printf("%d",i),b=1;i--; /*i--和i++使得i的值不变,即能把N含有的所有的当前质因数除尽,例如:24会一直把2除尽再去除3*/}printf("\n");}return 0;}



原创粉丝点击