首页 > 其他分享 >操作系统实验-与文件读写有关的系统调用函数用法

操作系统实验-与文件读写有关的系统调用函数用法

时间:2024-03-19 21:45:25浏览次数:23  
标签:文件 include 操作系统 int 读写 调用函数 fd 返回值 打开

1、open函数

点击查看代码
#include <fcntl.h>  //头文件
int open(const char *pathname, int flags, mode_t mode);

pathname: 要打开文件的路径名;
flags:用于指定文件的打开方式和行为,以下是一些常见的标志,都通过宏进行了定义;
O_RDONLY:只读方式打开文件。
O_WRONLY:只写方式打开文件。
O_RDWR:读写方式打开文件。
O_CREAT:如果文件不存在,则创建文件。
O_APPEND:在文件末尾追加数据。
mode:用于指定新创建的权限,仅在O_CREATE时有效。必须是8进制形式,C语言中八进制以数字0开头,每一个八进制数对应三位二进制,从高位到低位分别对应rwx(读写执行),如0644分别对应所有者有rw-权限,所属组有-w-权限,其它成员有-w-权限
函数返回一个文件描述符,是一个非负整数,如果返回值为负数,说明发生了错误
有关文件描述fd为什么是非负整数及其底层原理,可以参考链接:https://zhuanlan.zhihu.com/p/364617329
返回值:返回文件的文件操作符,对所打开的文件执行读写和关闭操作就需要通过这个文件操作符来进行

2、read函数

点击查看代码
#include <unistd.h>  //头文件
ssize_t read(int fd, void *buf, size_t count);

read函数从已打开的文件中读取数据,并将其存储到缓冲区buf中。它接受三个参数:
fd:已打开文件的文件描述符。
buf:用于存储读取数据的缓冲区。
count:要读取的字节数。
read函数返回实际读取的字节数。如果返回值为0,表示已到达文件末尾。如果返回值为负数,表示发生了错误

3、wite函数

点击查看代码
#include <unistd.h>  //头文件
ssize_t write(int fd, const void *buf, size_t count);

fd:已打开文件的文件描述符。
buf:要写入文件的数据缓冲区。
count:要写入的字节数。
返回值:返回实际写入的字节数,如果返回值为负数,表示发生了错误

4、lseek函数

点击查看代码
#include <unistd.h>  //头文件
off_t lseek(int fd, off_t offset, int whence);

用于在已经打开的文件中移动文件指针的位置
fd:已打开文件的文件描述符。
offset:指定文件指针移动的偏移量。
whence:指定偏移量的基准位置,可以是以下值之一:
SEEK_SET:从文件开头开始计算偏移量。
SEEK_CUR:从当前文件指针位置计算偏移量。
SEEK_END:从文件末尾开始计算偏移量。
返回值:返回文件指针移动后的位置,如果返回值为负数,表示发生了错误

5、close函数

点击查看代码
#include <unistd.h>  //头文件
int close(int fd);

用于关闭已打开的文件
fd:要关闭的文件描述符。
返回值:返回一个整数值,如果返回值为0,表示关闭文件成功,如果返回负数,表示发生错误

标签:文件,include,操作系统,int,读写,调用函数,fd,返回值,打开
From: https://www.cnblogs.com/starstxg/p/18081885

相关文章

  • Go 文件操作-读写文件
    Go文件操作-读写文件Go读取文件整个文件读取进内存(适合读小文件)1.直接指定文件名读取os.ReadFile()ioutil.ReadFile()(在Go1.16开始,ioutil.ReadFile()就等价于os.ReadFile())packagemainimport( "fmt" "os")funcmain(){ bytes,err:=os.ReadFile(".......
  • 操作系统实践之路——五、初始化(2.Linux初始化)
    文章目录一、全局流程二、从BIOS到GRUB三、GRUB是如何启动的四、详解vmlinuz文件结构五、流程梳理-1六、内核初始化从_start开始七、流程梳理-2参考资料前言​本章节将讨论一下Linux如何去做初始化。一、全局流程​在机器加电后,BIOS会进行自检,然后由BIOS加载......
  • 02_STM32软件+硬件SPI读写W25Q64(HAL库)
    目录1、SPI简介2、SPI时序单元2.1模式0(应用最多)2.2模式12.3 模式22.4 模式33、SPI移位示意图4、简单软件SPI代码(HAL库)5、简单硬件SPI读写W25Q64(HAL库)6、例程下载1、SPI简介2、SPI时序单元2.1模式0(应用最多)2.2模式12.3 模式2模式2与模式0类似,区别在......
  • 操作系统
    进程管理-进程状态三态与五态 进程管理-前趋图进程的同步与互斥互斥:同类资源竞争关系同步:进程间的协作关系进程管理-pv操作进程管理-死锁问题216+1026*5131页面置换算法:最优算法(理想型,不现实)随机算法先进先出(FIFO)算法:有可能产生抖动......
  • 操作系统内存管理笔记
    单级页表分页储存页表页表中的页表项是连续存放的,因此页号可以是隐含的,不需要占用空间页表中的块号所记录的只是内存块号,而非内存块的起始地址案例一假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节解答:由题目可知,内存块大小=页......
  • golang sync.Map之如何设计一个并发安全的读写分离结构?
    在golang中,想要并发安全的操作map,可以使用sync.Map结构,sync.Map是一个适合读多写少的数据结构,今天我们来看看它的设计思想,来看看为什么说它适合读多写少的场景。如下,是golang中sync.Map的数据结构,其中属性read是只读的map,dirty是负责写入的map,sync.Map中的键值对value......
  • 操作系统的启动过程介绍
            操作系统的启动过程、引导加载程序和系统初始化是计算机启动的关键步骤,这些步骤确保了计算机硬件和软件的正确配置以及操作系统的顺利运行。下面将详细介绍这些过程。        启动过程        计算机的启动过程通常从按下电源按钮开始。当......
  • SD card高速读写记录
    苯人原创,排版很差,爱看不看。SD卡有好几种总线协议,包括SD总线协议,SPI协议,UHS-II协议和PCIe协议。还有两种接口,一种是八个触点的,这种卡包括低速卡和高速UHS-I卡。另一种是多了几个触点的UHS-II接口,这种是支持更高速的UHS-II协议的高速卡。注意区分协议和接口以及传输模式。本文主......
  • C#判断操作系统位数 - 开源研究系列文章
          今天将开发的那个校时管理器应用程序复制到公司的电脑上进行使用,结果运行的时候报错了,想着应该是操作系统位数不支持导致的,于是写了此文进行判断。(对于有源码的读者请自己编译程序为32位的进行使用)      该代码非常简单,就是判断一下句柄的位数:1、源码;......
  • 【操作系统】线程、程序、进程死锁的必要条件?如何避免死锁?死锁的预防,死锁的避免(银行
    目录线程、程序、进程死锁的必要条件?如何避免死锁?死锁的预防死锁的避免(银行家)死锁的检测进程-资源分配图死锁检测步骤死锁的解除线程、程序、进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行......