linux系统编程-- 标准IO

标准IO:

标准IO在应用层:比文件IO高级一点,在windows也可以用
标准IO指C语言中提供的标准输入输出库文件所包含的函数。
即stdio.h文件中声明的函数,都是标准输入输出函数。
printf scanf
sprintf sscanf
fprintf fscanf

putchar getchar
puts gets
putc getc
fputs fgets

以终端为操作对象的标准IO函数:
printf();

函数原型:int printf(const char *format, …);
功能:向终端输出一个字符串。
优点:输出格式可以自定义。

scanf();

函数原型:int scanf(const char *format, …);
功能:从终端获取指定格式的数据,保存到一个变量空间中
优点:获取输入数据的格式可以指定。
缺点:如果从终端获取字符串,遇到空格结束。

puts();

函数原型:int puts(const char *s);
功能:输出一个字符串。 <仅仅只能输出字符串内容>
特点:自动在字符串末尾添加换行符

gets();

函数原型:char* gets(char *s);
功能:从终端获取一个字符串。
特点:获取字符串时,遇到换行才会结束。
获取字符串时,会一直获取,容易导致缓存区溢出。

scanf()和gets()在终端获取字符串时,特性对比:
 1)scanf()函数从终端获取字符串,遇到空格结束。
 2)gets()函数从终端获取字符串时,遇到换行才会结束。
 3)scanf()函数从终端获取字符串时,遇到换行结束获取,不会读取换行符,换行符依旧保留在输入缓存区。
 4)gets()函数从终端获取字符串时,遇到换行结束获取,最后的换行符也会读取到。读取到之后,丢弃换行符

以字符串为操作对象的标准IO函数:
sprintf();

函数原型:int sprintf(char *str, const char *format, …);
 功能:把一个字符串输出到str指向的缓存区中。
 用途:sprintf()主要用于字符串拼接。
 例: sprintf(buf, “%s–>%s/%s %d %f is %s”, “hello”, “/dev/”, “a.txt”, …);

例子:将两个数值拼接到一个字符串
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char tem[128]={0};
    //温湿度
    int temp=25;
    int hum=60;

    sprintf(tem,"现在的温湿度分别是:,温度%d,湿度%d %%\r\n",temp,hum);

    printf("%s\n", tem);

    return 0;
}

输出结果:现在的温湿度分别是:,温度25 ,湿度60 %

sscanf();

函数原型:int sscanf(const char *str, const char *format, …);
 功能:从str字符串中获取数据,根据指定格式进行获取,保存到变量空间中
 <以字符串作为输入来源>
 用途:数据类型转换。 把字符串转换为整型/浮点型/字符型数据

以文件为操作对象的标准IO函数:
fprintf();

函数原型:int fprintf(FILE *stream, const char *format, …);
功能:把一个字符串输出到stream指向文件中。对文件进行写操作!

fscanf();

  函数原型:int fscanf(FILE *stream, const char *format, …);
  功能:从stream指向的文件中获取数据,经过格式转换之后,保存到变量空间中。读操作!
<以文件作为数据输入来源>

fputs();

  函数原型:int fputs(const char *s, FILE *stream);
  功能:把字符串s输出到stream指向的文件中。 对文件的写操作
<输出重定向到文件中>

fgets();

  函数原型:char * fgets(char *s, int size, FILE *stream);
  功能:从stream指向文件中获取数据,最大获取size-1个,把获取到的数据保存在s指向的缓存区。
<对文件的读操作>
形参:
  s:存放获取到数据的缓存区
  size:最大获取数据的字节个数-1。
  stream:数据获取的来源。 <文件/终端>
 返回值:
  成功:获取到的字符串首地址
  失败:NULL

对文件写操作 对文件读操作
fpirntf(); fscanf();
fputs(); fgets();

重要!标准IO中的文件流指针

文件流指针:FILE*

  在标准IO对文件进行操作的时候,使用文件名称是不能准确指定一个文件,要用文件流指针。
  这里使用文件流指针去指定要操作的文件空间。
    文件流指针和文件描述符特性几乎相同!
  文件流指针比文件描述符多了一个缓存特性!
  文件流指针中:
   stdin:标准输入 stdout:标准输出 stderr:标准异常(都是地址)
  文件流结构体:

标准IO中的标准文件操作函数

标准IO    文件IO
fopen     open
fclose     close
fseek ,rewind  lseek

fread      read
fwrite      write
ftell

fopen();

函数原型:FILE* fopen(const char *path, const char *mode);
路径 读写方式(等同于open的flags)
函数功能:根据提供的文件名,得到对应的文件流指针,通过返回值返回。
形参列表:
  path:带路径的文件名
  mode:对文件的操作方式
  “r” :只读 <不能创建文件> 文件必须存在
  “w” :只写 <清空写> <能够创建文件>
  “a” :只写 <追加写> <能够创建文件>

+读写方式
  “r+” :读写 <覆盖写> <不能创建文件>
  “w+”:读写 <清空写> <能够创建文件>
  “a+” : 读写 <追加写> <能够创建文件>
操作总结:
在这里插入图片描述

返回值:
  成功:文件对应的文件流指针 – fp
  失败:NULL

#include <stdio.h>
int main (int argc, char*argv[])
{

  if(argc!=2)
  {
   printf("请使用格式:%s 文件名\n ",argv[1]);
   return -1;
  }

    FILE *fp=  fopen(argv[0], "r");
  if(fp == NULL)
  {
    printf("文件 %s不存在\n",argv[1]);
    return -2;
   }

    printf("成功打开文件%s \n",argv[1]);
    return 0;

}

fread();

  函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE stream);
  函数功能:从stream指向的文件中最大读取size
nmemb个字节的数据,存放到ptr指向的缓存区中

形参列表:
  读到哪: ptr:缓存区 --> 存放从文件中读取到的数据
  读多少: size:一块数据的字节数 (一次读取一块数据)
  一次读多少块: nmemb:最大读取的块数
  从哪读: stream:文件流指针 --> 指向要操作的文件
返回值:
  成功:实际读取到的完整的块数
  失败:负数

fwrite();

函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:提取ptr缓存区中存放的数据,写入到stream指向的文件中,最大写入size * nmemb个字节数据
形参列表:
  ptr:缓存区 --> 存放着要写入文件的数据
  size:一块数据的字节数 (一次写一块数据),一般写1
  nmemb:最大写入的块数 <实际写入文件的块数>
  stream:文件流指针 --> 指向要操作的文件
返回值:
  成功:实际写入文件数据的完整的块数
  失败:负数

fseek();

  函数原型:int fseek(FILE *stream, long offset, int whence);
  函数功能:对文件偏移指针重新定位
形参列表:
  stream:文件流指针 – 表示要操作的文件
  offset:相对于基准点的偏移距离 (负数:向前偏移 正数:向后偏移)
whence:重新定位文件偏移指针的基准点
SEEK_SET :文件开头
SEEK_CUR:文件偏移指针当前位置
SEEK_END:文件末尾
返回值:
  成功:0 失败:-1

ftell();

函数原型:long ftell(FILE *stream);
函数功能:返回文件偏移指针当前位置到文件开头的距离
形参列表:
  stream:文件流指针 – 要操作的文件
返回值:
  文件偏移指针当前位置到文件开头的距离

rewind();

函数原型:void rewind(FILE *stream);
函数功能:把文件偏移指针重新定位到文件开头。 == fseek(fp, 0, SEEK_SET);
形参列表:
stream:文件流指针 – 要操作的文件
返回值:无

fclose();

函数原型:int fclose(FILE *fp);
函数功能:关闭文件流指针
形参列表:
  fp:文件流指针 – 要操作的文件
返回值:
  成功:0
  失败:-1

发布了65 篇原创文章 · 获赞 36 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40860986/article/details/100944485