1fgets 与 gets 函数的区别:
1)两个函数都指定了缓存的地址,读入的行将送入其中,gets()是从标准输入中读取,而fgets()则从指定的流中读取
2)对于fgets()函数,不许指定缓存的大小,此函数一直读到下一个换行符为止,但是不会超过N-1个字符,读入的字符被送入缓存后以 NULL结尾。
如果被送入缓存的数据,总后一个新行符的字符数超过N-1,则返回一个不完整的行,而且缓存总是以NULL字符结尾;对vfgets()的下一次调用会继续读改行;
一个简单的实例说明下:
int main()
{
char line[MAXLINE];
//判断输入没有出错,并且有数据输入
if(fgets(line,MAXLINE,stdin) != NULL && line[0] != '\n')
{
fputs("result: ",stdout);
fputs(line,stdout);
puts("");//puts()函数以NULL终止字符串写道标准输出,如果终止符不写出
//puts会将一个新的终止符号写道终端上;
fgets(line,MAXLINE,stdin);
puts(line);
}
return 0;
}
从终端输入asdfgh;打印如下
asdfgh //终端只输入一次
result: asdf //打印2行如下;
gh
gets () 函数是一个不推荐使用的函数,因为在使用该函数前不能指定缓存区的大小,这样就很容易造成缓存的越界,写到缓存之外的存储空间,可能在成不可预料的后果;
getS()函数并不将新行符存入缓存中;
而fgets()函数会将新的换行符读入缓存中;使用时应当注意:
2)下面2个函数是提供每次输出一行的功能
****************************************************************************************************
int puts(const char *S);
int fputs(const char *s,FILE * stream);
返回值 成功非负,失败返回EOF;
*************************************************************************************************
函数fputs()将一个亿NULL字符终止的字符串写到指定的流,而终止符NULL不写出。
而PUTS()函数将加一个新的换行符到标准输出;
下面2个函数将执行二进制的IO操作
****************************************************************************************************
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
返回值读或者写的对象的个数;
**************************************************************************************************
int main()
{
int buf[20];
FILE *fp =fopen("./hello.c","r"),
*fp1 = fopen("./b.txt","a+");
fread(buf,sizeof(buf),2,fp);
fwrite(buf,sizeof(buf),1,fp1);
return 0;
}
标准IO 定位流
********************************************************************************************************
int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
void rewind(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, fpos_t *pos);
这个rewind()函数没有返回值。在成功完成,fgetpos(),fseek(),fsetpos()返回0,
和ftell()返回当前偏移量。否则,返回- 1并设置errno表示出错。
*********************************************************************************************************
ftell() 用于取得当前文件的位置,但并不引起IO的操作;
fseek()用户设定流文件的文件位置指示,whence参照点:SEEK_SET:文件头;SEEK_CUR:当前文件位置;SEEK_END:文件末尾;
rewind()用于设定流的文件位置指示为文件的开始;
rewind()等价于fseek(stream,0,SEEK_SET);
fgetpos()将文件指示器的当期值存入有POS指向的对象中,在以后调用fsetpos()时,可以使用辞职重新定位到该位置;
标准 IO 临时文件
********************************************************************************************************************
char *tmpnam(char *s);
FILE *tmpfile(void);
**********************************************************************************************************************
tmpnam()产生一个和现在文件名不一样的路径名字符串,
如果参数s是NULL,则返回值存放在静态区,如果不为NULL则认为其指向长度至少为L_tmpnam个数的字符串数组中,所产生的文件名存在到该数组中,也作为函数的返回值返回;
tmpfile()创建一个临时二进制文件,在关闭该文件,或者程序结束时将自动删除这种文件;
:测试当前操作系统能打开的最大文件数:
int main()
{
char *path;
int i;
for(i=0;i<2000;i++)
{
path = tmpnam(NULL);
// printf("%s\n",path);
FILE *fp = fopen(path,"w+");
if(NULL == fp)
{
printf("%d\n",i);
return -1;
}
}
return 0;
}
标准IO练习:
并编写程序,打开一个文件,每隔一秒向文件中写入以下内容,并且要求每次重新打开会接着往下写:
0, 112-4-17 21:1:39
1, 112-4-17 21:1:40
2, 112-4-17 21:1:41
3, 112-4-17 21:1:42
4, 112-4-17 21:1:43
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main()
{
char buf[256];
int linecount = 0;
FILE *fp = fopen("test.txt","a+");
//读到文件的结尾
while(fgets(buf,sizeof(buf),fp) != NULL)
{
linecount++;
}
while(1)
{
time_t t = time(NULL);
struct tm *time = localtime(&t) ;
time -> tm_year += 1900;
time -> tm_mon += 1;
fprintf(fp,"%d, %d-%d-%d %d:%d:%d\n",linecount++,time -> tm_year,time -> tm_mon\
,time -> tm_mday,time -> tm_hour,time -> tm_min,time -> tm_sec);
fflush(fp);
printf("%d, %d-%d-%d %d:%d:%d\n",linecount,time -> tm_year,time -> tm_mon\
,time -> tm_mday,time -> tm_hour,time -> tm_min,time -> tm_sec);
sleep(1);
}
fclose(fp);
return 0;
}
分享到:
相关推荐
C标准库函数集C标准库函数集C标准库函数集C标准库函数集C标准库函数集
stm32 io口库函数操作,为STM32初学者准备
C++常用标准库函数.pdf
stm32标准版库函数,stm32标准系列单片机都可以使用,使用keil开发。
标准C库函数的简单介绍,如果想详细的就去找编译过的
常用C语言标准库函数常用C语言标准库函数常用C语言标准库函数常用C语言标准库函数常用C语言标准库函数
C标准库函-C标准库函数-C标准库函数-C标准库函数-C标准库函数-C标准库函数-C标准库函数-C标准库函数
C语言标准库函数C语言标准库函数C语言标准库函数C语言标准库函数C语言标准库函数C语言标准库函数C语言标准库函数
常用C语言标准库函数常用常用C语言标准库函数C语言标准库函数常用C语言标准库函数
stm32f4标准库函数开发手册有相应的project例子,方便查阅GPIO,EXTI,USART,ADC等怎么开发使用。
C语言标准库函数
基于STM32F103标准库函数的基础例程,以keil为开发平台,主要以F103ZE开发板为例,适合基础学习。
c语言标准库函数文档 比linux上man命令更方便,中文简单易懂 龙马工作室整理
标准库函数介绍以及库函数工程模板配置
这是C++所有的库函数的介绍,相信对正在学习C++的同学有帮助。
2,标准例程-库函数版本
C/C++ 标准库函数手册。 包含大部分常用的标准库函数、标准模版库和关键字等描述。
C语言标准库函数源码大全(24M涵盖所有库函数) ,相当全的库函数源码! 如标准 io ,字符类处理等,各种源码库函数,是学习C语言,精通C语言的必备良药!平时项目参考相当给力!
Fortran标准库函数参考,适合Fortran初学者
标准C++库函数参考(中文版的) 各种库函数