文件基本I/O操作

41 篇文章 0 订阅

文件基本I/O操作

1.打开/创建文件(p71)

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
int creat(const char*pathname,mode_t mode);
flags:打开方式
mode:创建新文件时,指定权限
  • 打开成功,返回文件描述符,失败返回-1

打开方式flags:

  • O_RDONLY :只读方式
  • O_WRONLY :只写方式
  • O_RDWR :读写方式
  • O_CREAT :如果指定的文pathname不存在,就创建该文件
  • O_EXCL:与O_CREAT一起使用时,当pathname指定的文件已经存在,则open将执行失败并返回一个错误
  • O_NOCTTY: 如果pathname是终端设备,则不会把该终端设备当成进程控制端
  • O_TRUNC : 如果pathname指定的文件是已经存在的普通文件,并且打开的方式是可写的(如O_RDWR或O_WRONLY),就将文件的长度裁为0,对于FIFO文件或终端设备文件,该方式将被忽略
  • O_APPEND: 以追加的方式打开文件。在每一次调用write写文件之前,文件指针将被自为置到文件未尾,该方式保证对文件的写都是在文件末尾进行追加的
  • O_NONBLOCK : 以不可阻断的方式打开文件。无论有无数据读取或等待,都会立即返回进程,同O_NDELAY
  • O_SYNC : 文件以同步I/O的方式打开,这样每一次对文件的写操作之后,进程都会阻塞直到数据真正写到存储设备上
  • O_NOFOLLOW : 如果pathname是一个符号链接文件,则open将执行失败。这是FreeBSD中的一个功能,后来加入Linux2.1L126中
  • O_DIRECTORY : 如果pathname不是一个目录,则open将执行失败

文件打开方式举例

  • O_RDONLY 只读方式打开
  • O_RDWR | O_CREAT如果文件存在就以读写方式打开,否则就创建文件
  • O_RDWR | O_CREAT | O_EXCL 如果文件不存在就创建,否则就返回错误
  • O_RDWR | O_CREAT | O_TRUNC 如果文件存在,则以读写方式打开,并将文件清空;否则创建该文件
  • O_WRONLY | O_APPEND 以只写方式打开文件,并且数据以追加的方式每次写入文件未尾
  • O_WRONLY | O_SYNC 以只写方式打开文件,并且每次写文件后等特数据真正写入磁盘后再返回进程

读文件

#include<unistd.h>
ssize_t read(int fp,void *buf,size_t count);

从文件描述符fp中读取count个字节到buf中
从当前读写指针处开始读取文件数据
成功:返回实际读回的字节数,失败:返回-1
  • 错误处理
    read 返回值:
    1.>0实际读到的字节数buf=1024 1. buf 1024 2.<buf 56;
    2.=0数据读完(读到文件、管道、socket 末尾–对端关闭)
    3.-1异常
    1.errno
    EINTR 被信号中断重启/quit
    2.errno==EAGAIN(EWOULDBLOCK)非阻塞方式读,并且没有数据
    3.其他值出现错误。perror exit。

写文件

#include<unistd.h>
ssize_t write(int fp,const void *buf,size_t count);

将buf中的count个字节的数据写入文件描述符fp的文件中
成功:返回写入数据的字节数,失败:返回-1

关闭文件

#include<unistd.h>
int close(int fd);

成功:返回0,失败:返回-1

文件操作

文件类型:

1、普通文件 “-”
2、目录文件 “d”
3、设备文件 字符设备文件 “c” (不能存储数据:鼠标,键盘) ,块设备文件 “b”(可以存储数据,光盘,硬盘)
4、符号(软)链接文件 “l”,内容是所连接目标文件的路径名。
5、管道文件 “p“,无名管道,命名管道。
6、套接字文件 ”s”,Linux系统间进行网络通信的一种机制。

上述信息介绍:
  • d——文件类型
  • rwxrwxrwx-——文件权限(用户主,用户组,其他用户)
  • x:表示文件是否可以运行,或文件夹是否可以进入
  • 2——链接文件个数
  • crd——用户名
  • crd——用户组名
  • 4096——文件字节单位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值