首页 > 系统相关 >Linux开发之文件IO

Linux开发之文件IO

时间:2023-04-16 23:46:38浏览次数:38  
标签:文件 int 描述符 IO Linux include open

文件IO

C语言中有文件IO相关的库函数(fopen等),他的实际上是经过了某些步骤,然后调用linux系统调用。

这篇文章,要讲的是linux系统调用的文件IO,如open,close,read等。

预备知识

文件描述符

在linux中,程序打开的文件,会有一个整数指向它,这就叫文件描述符。通过对文件描述符进行操作,就能实际操作到打开的文件上。

文件描述符默认从3开始分配,因为0,1,2已经被占用,分别是标准输入,标准输出以及标准错误,这3个都指向当前终端。每打开一个新的文件,都会分配最小的未使用的文件描述符(系统做这个工作)。

man

linux的官方文档就是man手册,在学习系统调用时候查阅man手册很重要。系统函数在man的第2卷,比如想要查阅open系统函数可以输入man 2 open

open函数文档

perror()

打印errno所代表的错误信息。

// 所需头文件(之后将不再解释
#include <stdio.h>

void perror(const char *s);

s是展示给用户的字符串。

IO system call

open()

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, or O_RDWR)。还有一些可选的,可以用按位或来选中。可选项如下:
    • O_APPEND:使用追加模式打开文件。
    • O_CREAT:如果文件不存在将创建文件。
  • mode:创建文件的权限,八进制形式(如0777)。不过文件最终权限=mode&~umask。(通过命令umask来查看)。

返回值是文件描述符(>0),如果文件打开失败,将返回-1,并设置errno。

read()

read函数用来从文件中读取数据。

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);
  • fd:要读取的文件的文件描述符。
  • buf:要把读取到的数据存到哪里
  • count:读取的大小

返回值是实际读取到的大小,如果>0表示读取正常,如果=0表示读完文件了,如果=-1表示读取错误,并设置errno。

write()

write函数用来在文件中写入数据。

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);
  • fd:要写入的文件的文件描述符。
  • buf:要写入的数据的地址
  • count:写入的大小

返回值是实际读写入的大小,如果=-1表示写入错误,并设置errno。

标签:文件,int,描述符,IO,Linux,include,open
From: https://www.cnblogs.com/1v7w/p/17324425.html

相关文章

  • UVA1392 DNA Regions
     https://www.luogu.com.cn/problem/UVA1392给定两个长度为n的字符串A和B,满足A和B都只由大写字母A、C、G、T组成。求一个长度最长的闭区间[L,R],满足对于i∈[L,R], 有不超过p%的i满足Ai≠Bi ......
  • Linux系统知识(十一)-Ubuntu使用TCP/UDP并限制最大连接数
    一、Ubuntu使用TCP1、使用TCP的命令:  /dev/[tcp|upd]/host/port;例如::cat</dev/tcp/127.0.0.1/222、查看当前监听的端口  -bash:connect:拒绝连接  -bash:/dev/[tcp|upd]/host/port:拒绝连接  例:-bash:connect:Connectionrefused-bash:/dev/tcp/127.......
  • 第 14 章Linux 实操篇-进程管理(重点)
    第14章Linux实操篇-进程管理(重点)目录第14章Linux实操篇-进程管理(重点)14.1基本介绍14.2显示系统执行的进程14.2.1基本介绍14.2.2ps详解14.2.3应用实例14.1终止进程kill和killall14.3.1介绍:14.3.2基本语法14.3.3常用选项14.3.4最佳实践14.5服务(service)......
  • linux中安装nvm报错: /lib64/libm.so.6: version `GLIBC_2.28
    :/lib64/libm.so.6:version`GLIBC_2.27 #查看系统内安装的glibc版本strings/lib64/libc.so.6|grepGLIBC_解决cd/root#编译安装wgethttp://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gztarxfglibc-2.28.tar.gzcdglibc-2.28/&&mkdirbuild&&cdbuil......
  • IDE-Visual Studio Code-Extension-离线安装PlantUML
    IDE-VisualStudioCode-Extension-离线安装PlantUMLhttps://www.hd2y.net/archives/plantuml-installation-and-usePlantUML+Graphviz+JavaPlantUMLExtensionvscodemarketplace注意路径,我第一次下载的vs的插件。https://marketplace.visualstudio.com/vscodeh......
  • 批量归一化 BatchNormalization
    一、BatchNormalization   如果设定了合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进行学习。为了使各层拥有适当的广度(激活值分布不能太广,易饱和),BatchNormalization试图在学习过程中“强制性”地调整激活值的分布会怎样呢?缓解内部协变量偏移。......
  • Linux 基金会发布 2017 最佳 Linux 发行名单
    Linux 基金会官网Linux.com近日发布了一篇名为“2017年最佳Linux发行版”的文章,并表示这些是从数百个发行版中发现的最好的Linux发行版。1、最佳系统管理员发行版:ParrotLinux2、最近轻量级发行版:LXLE3、最佳桌面发行版:ElementaryOS4、最佳验证发行版:Gentoo......
  • Linux 基金会发布 2017 最佳 Linux 发行名单
    Linux 基金会官网Linux.com近日发布了一篇名为“2017年最佳Linux发行版”的文章,并表示这些是从数百个发行版中发现的最好的Linux发行版。1、最佳系统管理员发行版:ParrotLinux2、最近轻量级发行版:LXLE3、最佳桌面发行版:ElementaryOS4、最佳验证发行版:Gentoo......
  • Linux 基金会发布 2017 最佳 Linux 发行名单
    Linux 基金会官网Linux.com近日发布了一篇名为“2017年最佳Linux发行版”的文章,并表示这些是从数百个发行版中发现的最好的Linux发行版。1、最佳系统管理员发行版:ParrotLinux2、最近轻量级发行版:LXLE3、最佳桌面发行版:ElementaryOS4、最佳验证发行版:Gentoo......
  • 第 12 章Linux 实操篇-网络配置
    第12章Linux实操篇-网络配置目录第12章Linux实操篇-网络配置13.1Linux网络配置原理图13.1.1画出原理图,帮助理解13.2查看网络IP和网关13.2.1查看虚拟网络编辑器和修改IP地址13.2.2查看网关13.3查看windows环境的中VMnet8网络配置(ipconfig指令)13.4查看lin......