欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 文件io:Fileio

文件io:Fileio

2024/10/24 7:28:50 来源:https://blog.csdn.net/weixin_62409078/article/details/141162346  浏览:    关键词:文件io:Fileio

文件io

操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为系统调用 其中有个 文件IO
一般都是对设备文件操作,当然也可以对普通文件进行操作。

linux的文件IO机制

一个基于Linux内核的没有缓存的IO机制
特性:
1. 没有缓存区
2 .操作对象不在是流,而是文件描述符  FILE*    int 0-1023
3.文件描述符

很小的非负的整数 int   0-1023
内核每打开一个文件就会获得一个文件 描述符

  每个程序在启动的时候操作系统默认为其打开三个描述符与流对象匹配:
  0 ==>STDIN_FILENO === stdin
  1 ==>STDOUT_FILENO == stdout
  2 ==>STDERR_FILENO == stderr
  stdin,stdout,stderr,===>FILE*
 头文件 unistd.h ===>POSIX 标准库 stdio.h 
 

fopen  open 
w            O_WRONLY|O_CREAT|O_TRUNC 
w+          O_RDWR|O_CREAT|O_TRUNC 
r             O_RDONLY 
r+           O_RDWR
a            O_WRONLY|O_CREAT|O_APPEND
a+          O_RDWR|O_CREAT|O_APPEND

open
read /write 
close 


函数接口


open

open("1.c",O_WRONLY|O_CREAT,0666 );

int open(const char *pathname, int flags,int mode);

功能:获得一个文件描述符
参数:

pathname:文件名(文件的路径)

flags:表示文件打开的方式(使用一个或多个标志位的组合)
O_RDONLY 只读
O_WRONLY只写
O_RDWR读写
O_CREAT创建文件:如果文件不存在则创建文件,需要提供第三个参数mode
O_EXCL需要和O_CREAT同时使用,表示新建的文件不能存在,成功,否则open就会失败
O_NOCTTY不是终端设备
O_TRUNC文件内容清空:如果文件存在,并且以写入方式打开,将其长度截断为0
O_APPEND追加:写入的数据将添加到文件末尾
O_ASYNC异步io,什么时候io不确定,
O_NONBLOCK非阻塞 

返回值:        成功返回文件描述符        失败返回-1

write

char buf[50];
size_t write(int fd,  const  void *buf, size_t count);

功能:通过文件描述符向文件中写一串数据
参数:
fd:文件描述符
buf:要写入文件的字符串的首地址(填有效长度)
count:要写入字符的个数
返回值:        成功返回实际写入的个数        失败返回-1


read

ssize_t read(int fd, void *buf, size_t count);

功能:通过文件描述符读取文件中的数据
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:要读到数据的个数
返回值:        成功返回读到数据的个数        失败返回-1        读到文件结尾返回0


lseek  

fseek, rewind ftell

off_t lseek(int fd, off_t offset, int whence);

功能:定位光标的位置
参数:
fd:文件描述符
offset:偏移量
正:向后偏移
负:向前偏移
零:不偏移
whence:起始位置,决定了偏移量相对于哪个位置计算
SEEK_SET从文件的开头开始偏移
SEEK_CUR从当前位置开始偏移
SEEK_END从文件的末尾开始偏移
返回值:        成功返回偏移量 失败返回-1

eg:
lseek(fd,0,SEEK_END);将文件指针移动到文件的末尾

注意:
1、不支持O_APPEND的追加模式,无法生成空洞文件
2、lseek函数执行失败,文件指针还在偏移前的位置
3、lseek函数在设备文件上偏移无效



阻塞:在操作系统和并发编程中,阻塞指的是程序由于某些条件未满足(如等待输入/输出完成)而暂停执行,直到条件满足
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com