Linux-open、read、write函数

这篇具有很好参考价值的文章主要介绍了Linux-open、read、write函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、open函数

#include<stdio.h>
#include<unistd.h> //close函数头文件

#include<sys/types.h> //open函数头文件
#include<sys/stat.h> //open函数头文件
#include<fcntl.h> //flags参数头文件

//返回值为对应文件的描述符,打开失败返回-1
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
//参数 pathname为文件路径
//参数 flags为文件操作权限
//参数 mode为当文件被创建时,附加文件的初始分为权限 rwx

详细使用可以使用Linux命令:man 2 open

flags参数:(注意这里可以使用 |来添加多个参数),如:

int fd = open("./test.txt",O_RDWR | O_CREAT, 0644);
close(fd);

flags三个访问权限参数:(注意这三个参数在flags中只能出现其中一个

O_RDONLY:只读         

O_WRONLY:只写         

O_RDWR:读写

flags其他参数:

O_CREAT:若文件不存在则创建它。

补充:需要同时使用open的第三个参数mode,为新文件添加访问权限。

O_EXCL:在使用O_CREAT参数创建文件,而文件已经存在时报错。       

O_APPEND:将新写入的数据放到文件的末尾,不会覆盖前面已有的数据。

O_TRUNC:它表示以截断的方式打开文件。当以O_TRUNC标志打开文件时,如果文件已经存在,那么文件的内容会被清空;如果文件不存在,那么会创建一个新的空文件。

mode参数:

表示设置文件访问权限的初始值,比如0644表示-rw-r–r–,也可以用S_IRUSR、S_IWUSR等宏定义按位或起来表示,具体情况可以百度 或者 man 2 open命令

注意点:创建权限时,受当前进程的umask影响,

具体情况为:最终权限 = mode & ~umask

查询当前进程的umask的方法:直接运行命令(umask) 

例如umask输出002则~umask为775,然后mode会和775进行&运算,

即使你输入的是0777,那么最终的权限也会是775

2、read和write函数

#include<unistd.h>
//失败均返回-1
ssize_t read(int fd, void *buf, size_t count);
size_t write(int fd, const void *buf, size_t count);

fd参数:文件描述符

buf参数:缓冲区,用于存放接受的数据或者需要写入的数据。

(注意:buf是一个指向字符数组的指针,所以不能用指针代替数组)如:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<iostream>
using namespace std;

int main(int argc,char *argv[]){
    int fd1;
    fd1 = open("./openfile.txt", O_RDWR);
    printf("fd1 = %d\n", fd1);

    int fd2;
    fd2 = open("./copytest.txt", O_RDWR | O_CREAT | O_TRUNC, 0777);
    
    char buf[1024];//这里只能用数组,而不能用 char *buf
    int size_re=0;
    while((size_re=read(fd1,buf,1024))!=0){
        cout<<size_re<<endl;
        write(fd2,buf,size_re);
    }

    close(fd1);
    close(fd2);
    return 0;
}

count参数:

read:缓冲区的大小

write:写入数据的大小

记录:因为很少用文件函数,所以在一次线下面试的过程中,对方让我手写一个读文件的函数,我直接呆住了,我知道open和read函数,但是让我用手写瞬间就呆住了,不知道怎么下手,可能是太紧张的问题,10秒后我放弃了,可是手写函数真的很呆啊,那些参数我记不得哇。<-.->!文章来源地址https://www.toymoban.com/news/detail-612132.html

到了这里,关于Linux-open、read、write函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python---文件、基本操作:打开open,写入write,关闭close,读取read/readlines,移动光标seek,mode模式

    文件: 内存中存放的数据在计算机关机后就会消失。 要长久保存数据 ,就要使用硬盘、光盘、U 盘等设备。 为了便于数据的管理和检索,引入了 “文件 ”的概念。 像移动硬盘,内存卡,网盘等等。 一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予

    2024年02月03日
    浏览(56)
  • Linux文件写入操作:write函数的使用

    write函数定义 :write函数是基于Linux系统中的一项函数调用,主要用于在打开/创建的文件中 写入数据。 write函数包含的头文件 : write函数的格式原型 : write函数中的三项参数 : ① int fd open一个文件,就会返回到文件描述符中,对文件后续的操作都需要用到文件描述符。 ②

    2024年02月01日
    浏览(48)
  • linux:管理员权限下发生“etc/profile“ E212: Can‘t open file for writing解决办法

    其实很简单,解决了,可能是路径的问题 第一步: cd到根目录 第二步: cd到etc目录 第三步: 进入vim更改profile文件 第四步: 正常:wq保存并且退出就好,这次可以了

    2024年02月10日
    浏览(50)
  • Linux文件打开函数open()

    把上边的内容保存在 openexam.c 里边,然后使用 gcc openexam.c -o openexam 进行编译,然后 ./openexam 进行执行,发现输出“ -1 ”。 此文章为5月Day 14学习笔记,内容来源于极客时间《网络编程实战》。

    2024年02月04日
    浏览(36)
  • linux文件I/O之 open() 函数用法

    #include sys/types.h #include sys/stat.h #include fcntl.h typedef unsigned int mode_t ; int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 打开或创建一个文件 成功返回一个新的 文件描述符 (指代这个打开的文件),失败则返回 -1,并设置 errno 为相对应的错误标志 pa

    2024年02月13日
    浏览(33)
  • C语言读写文件函数:read/write,pread/pwrite,readv/writev,preadv/pwritev,preadv2/pwritev2

    函数原型 示例程序 read/write/pread/pwrite函数比较直观,这里仅示例readv/writev函数用法。 把程序中定义的buf通过writev函数输出到屏幕上。 分析 读写多个缓冲区,有几种策略: 调用read、write分别操作多次 这种方式多次切换内核态,效率最低。 把多个缓冲区复制合并到同一个大的

    2024年02月12日
    浏览(44)
  • HAL库函数中的HAL_I2C_Mem_Write /HAL_I2C_Mem_Read中的DevAddress解析

    在HAL库函数中的HAL_I2C_Mem_Write /HAL_I2C_Mem_Read两个函数的作用就是玩IIC设备中写入/读取多个直接的数据, 函数原型: 两个函传入的参数中都需要DevAddress, 以AT24C02为例, 上面的这个是EEPROM设备的写地址和读地址,,一般是这种定义的,但是在野火的HAL案例中 这个是写地址,为什么不定义

    2024年02月11日
    浏览(56)
  • read/write和fread/fwrite介绍

    UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write 这里简单的介绍一下他们的区别。 1. fopen 系列是标准的C库函数;open系列是 POSIX 定义的,是UNIX系统里的system call。 也就是说,fopen系列更具有可移植性;而open系列只能用在 POSIX 的操作系

    2024年02月09日
    浏览(41)
  • c++ 继承方式高内聚read write function操作

    派生类增加传入指定函数

    2024年02月08日
    浏览(43)
  • IO学习系列之使用read和write复制文件内容

    read函数: 功能:从 文件fd 中读取 count个字节 ,存放进 指针buf ; 具体内容: write函数: 功能:把 指针buf 中的内容,写 count个字节 到 文件fd 中; 具体内容: 示例代码:

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包