linux中open, read, write, lseek,close系统调用函数功能


open, read, write, lseek,close属于系统调用接口。

1.open

	#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);

参数:
pathname:要打开的文件名
flags:打开方式:

	O_RDONLY: 只读打开 	
	O_WRONLY: 只写打开
	O_RDWR: 读写打开。
	这三种打开方式只能使用任意的一个,而且为必选项。

此外还可搭配使用的打开方式:(用 | 符号链接)

	O_APPEND: 以追加的方式打开文件
    O_CREAT  创建一个文件,注意带O_CREAT参数的需要加上**第三个参数创建权限 mode**,常用:0664
    O_EXCL如果使用了O_CREAT而且文件已经存在,就会发生一个错误
    O_NOBLOCK 以非阻塞的方式打开一个文件
    O_TRUNC  如果文件已经存在,则删除文件的内容
eg: w+ 权限就相当于: O_RDWR | O_TRUNC   |   O_CREAT

mode:创建权限, eg:0664;

返回值:成功返回非负整数,即文件描述符。失败返回-1.

2.read

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

参数
fd:文件描述符,标识要读取的文件。如果为0,则从标准输入读数据。类似于scanf()的功能。

文件描述符:系统调用IO接口的操作句柄,为一个整数,在系统中唯一标识文件。程序启动默认会打开的三个文件描述符:

0:标准输入
1:标准输出
2:标准错误

*buf:缓冲区,用来存储读入的数据。

count:要读取文件的长度。

返回值ssize_t:成功则返回实际读到的数据长度,失败-1.

3.write

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

参数:

fd:open返回的操作句柄(文件描述符)。
*buf:要写入的文件数据。
count:要写入文件长度。

返回值size_t: 成功返回实际写入文件的数据长度。失败-1;

4.lseek

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);

fd:是打开的文件描述符,
offset:偏移量,
whence:相对起始位置

SEEK_SET 文件开始,
SEEK_CUR 文件当前前位置
SEEK_END 文件结尾

返回值:成功返回跳转后相对于文件起始处的偏移量,若跳转到文件末尾则可获得文件长度信息。失败 -1;

5.close

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

功能是关闭文件描述符并释放其对应的内核资源。
成功返回0,出错返回-1

最后有一个简单练习题回顾知识点使用:
要求:
在这里插入图片描述

  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>    
  #include <stdio.h>     
  #include <stdlib.h>    
  #include <string.h>                                                              
  int main()
  {         
    int fd = open("./bite.txt",O_RDWR|O_CREAT,0664);
    if(fd < 0){                                     
      perror("open error");
      return -1;           
    }           
    char* str = "i like linux!";
    int ret = write(fd,str,strlen(str)) ;
    if(ret<0){                           
    perror("write error");
    return -1;            
    }         
    lseek(fd,0,SEEK_SET);
    char buf[1024]={0};  
    int ret1 = read(fd,buf,1023);
    if(ret1 <0){                 
      perror("read error");
      return  -1;          
    }            
    printf("%s\n",buf);
     close(fd);         
    return 0; 
  }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值