IO、线程、进程

一、IO

什么叫IO
1、input/output,针对文件的输入和输出。

Linux下的文件类型:
b(block块设备)
c(character字符设备)
d(directory目录)
-(普通文件)
l(line链接文件)
s(socket套接字文件)
p(pipe管道文件)

IO的分类

标准IO:适用于普通文件

一)什么是标准IO:标准IO是基于流的。当通过标准IO打开或者创建文件的时候,系统使用一个和文件相关联。
标准IO的特点

  1. 标准IO遵循ANSI C标准,实际上标准IO实现是通过调用标准C库中的函数来实现
  2. 标准IO通过利用缓冲机制减少系统调用的次数,从而提高程序效率
  3. 标准IO围绕“流”进行操作,流使用" FILE * "描述,"FILE * "->一个结构体指针。
  4. 标准IO默认打开三个流:stdin(标准输入-0),stdout(标准输出-1),stderr(标准出错-2),重新创建的流指针序号从3开始

二)什么是“流”:数据仅是简单地从文件流入或者流出,这种现象就称为流
流的类型:流的类型分两种,分别叫文本流和二进制流

  1. 文本流
    在处理数据时,是将数据转换为对应的ASCII码,最终再以二进制形式存取
    “1234”
    ​ 49 50 51 52 --> 110001 110010 110011 110100
  2. 二进制流
    在处理数据时,将数据转换为对应的二进制数进行存取
    “1234” --> 1234 --> 100 1101 0010

文本流在处理换行符时跟二进制流不同:

​ 文本流: ‘\n’ --> ‘\r’ ‘\n’

​ 二进制流: ‘\n’ --> ‘\n’

在linux中,文本流和二进制流不做区分

三种特殊流:这三个特殊流在一个文件中是默认打开的

​ 标准输入流 – 键盘 – stdin – 0

​ 标准输出流 – 终端 – stdout – 1

​ 标准错误流 – – stderr – 2

三)缓冲区类型

  1. 全缓存:当用户打开一个普通文件时,默认使用全缓存。
    当缓存区或者时才会进行实际的IO操作,或者使用fflush强制刷新缓冲区也可以进行IO操作
  2. 行缓存:如果IO操作跟终端相关,则使用行缓存
    当缓冲区满或者遇到换行符时,进行实际的IO操作
  3. 无缓存:当跟错误输出相关时,使用无缓存

四)标准IO相关库函数
打开/关闭 fopen/fclose

​ 按字节读写 fgetc/fputc

​ 按行读写 fgets/fputs

​ 按对象读写 fread/fwrite

​ 刷新流 fflush

​ 判断错误流 feof

​ 文件指针定位 ftell /fseek/ rewind

文件IO:适用于任意文件

一)什么叫文件IO
文件IO指的就是文件的输入输出。这里的输入输出是从内存的角度出发的,也就是说,输入就是从文件读取数据输入到内存中,输出就是从内存中读取数据输出到文件中。
二)、文件描述符
文件描述符的本质是一个按顺序分配的最小的非负整数,当用户打开或者新建一个文件时,系统会向当前进程返回一个最小的可用的文件描述符。
三)、文件IO相关函数
打开文件 – open

 #include 
 #include 
 #include 

 int open(const char *pathname, int flags);
 int open(const char *pathname, int flags, mode_t mode);
   参数:
   		pathname:打开文件的文件名
   		flags:打开文件的方式
   			O_RDONLY:以只读方式打开文件
   			O_WRONLY:以只写方式打开文件
   			O_RDWR:以读写方式打开文件  //前三个选项必须选择一个填写
   			O_CREAT:如果打开文件不存在,则先创建再打开,并用第三个参数设置初始权限,一般设置为0664
   			O_APPEND:以追加的方式打开文件,所有对文件的写操作都在文件末尾进行
   			O_EXCL:一般和O_CREAT结合使用,用于检测文件是否存在
   			O_TRUNC:打开文件时,将文件内容清空
   			
   		mode:新建文件的初始权限--一般设置为0664
   				当open函数在新建文件时,需要用该参数为其设置初始权限
   
   返回值:
   	成功返回文件描述符,失败返回-1

关闭文件 – close
读文件 – read
写文件 – write
​文件定位 – lseek

目录操作

1、打开目录 – opendir()

 #include 
  #include 

   DIR *opendir(const char *name);
   参数:
   	name:打开的目录名
   返回值:
   	成功返回目录流指针,失败返回NULL

2、关闭目录 – closedir()
3、读取目录 – readdir():功能:从指定目录中读取一个目录项(随机)

 #include 

 struct dirent *readdir(DIR *dirp);	
    参数:
    	dirp:目录流指针
   	返回值:
   		成功返回一个目录项的相关结构体指针,失败或者没有目录项可读返回NULL
            
            struct dirent {
   
               ino_t          d_ino

你可能感兴趣的:(缓存,开发语言,c语言)