Linux的文件系统

在Windows系统下,我们写一个文档的时候,一般通过打开/创建文档,编辑文档,保存文档,关闭文档实现,在Linux系统下,基本上也是这样的步骤,系统为我们提供了几个接口函数来实现:open(),write(),read(),lseek(),close()。下面来看这几个函数的用法。

1、open()

在终端中输入man 2 open,可以看到

在NAME中可以看到,有3个名字,在SYNOPSIS中,前三个头文件就是我们在使用open函数时需要添加的,再往下看,open函数有两个函数重载,第一个有两个参数,第一个参数是一个常量指针,也就是一个字符串,指向文件的地址,第二个参数是打开文件的方式,一般有O_RDONLY只读打开,O_WRONLY只写打开,O_RDWR可读可写打开,然后下面是可选的参数。

O_CREAT:若文件不存在则创建它,若使用这个参数,则应使用第二个重载,指明文件的许可权限。

O_EXCL:一般和O_CREAT一起使用,若文件已经存在,则不会打开文件,并且返回一个错误。

O_APPEND:每次写时都加到文件的尾端。

O_TRUNC:打开文件时,如果文件中本来是有内容的,而且为只读或只写打开,则其长度截断为0。也就是将原先东西全部删除。

最后参数mode就是在文件不存在时,创建文件时文件的权限。

creat()就是创建文件,参数参考上面。

openat()和open()区别如下:

(1) path参数指定的是绝对路径名,在这种情况下,fd参数被忽略,openat函数就相当于open函数。
(2) path参数指定的是相对路径名,fd+path就是完成路径名。
(3) path参数指定了相对路径名,fd参数写AT_FDCWD。在这种情况下,路径名在当前工作目录中获取。

我们可以看到open函数的返回值是int类型的,在使用时会给创建的文件一个ID,以方便在下面使用,若文件创建失败则返回-1。

2、write()

和上面一样,我们可以看到

使用时包含头文件,只有一个函数原型,

fd:打开的文件名,上面open函数的返回值

const void *buf:指向要写的内容的位置

count:写入的字节大小

返回值:写入字节的大小

如果返回-1,则写入失败。

3、read函数

我们直接来看函数原型

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

fd:同上

void *buf:指向读出的数据存放的位置

count:读的数据的字节数

返回值:实际读取的字节数

读取失败返回-1。

但是应当注意,如果读取之前,对文件进行过操作,需要对光标位置重新确定,设置在我们希望起始的位置。

4、lseek函数

函数原型为

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

fd:参考上面

offsert:相对whence的偏移值,可正可负

whence:有3个可选项

                SEEK_SET:文件起始位置

                SEEK_CUR:文件当前位置

                SEEK_END:文件结尾

返回值:相对与起始位置的偏移量

                出现错误,返回-1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值