Linux文件操作基础及基本I/O函数使用

这篇具有很好参考价值的文章主要介绍了Linux文件操作基础及基本I/O函数使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

Linux是一个基于文件系统的操作系统,文件操作是其中一项最基本的任务之一。通过文件操作,用户可以创建、移动、复制、读取和修改文件及目录等。

一、基础命令简单讲解

1.ls:列出目录中的文件和子目录。

ls -a:显示所有包括隐藏文件。
ls -l:使用长格式输出文件详细信息。
ls -h:显示文件大小时使用易读的格式。
cd:切换当前目录。

2.cd /:切换到根目录。
cd ~:切换到当前用户的主目录。
cd …:切换到上级目录。
mkdir:创建目录。

3.mkdir dir1:创建一个名为“dir1”的目录。
mkdir -p dir1/dir2:创建多层目录。
rm:删除文件或目录。

4.rm file1:删除一个名为“file1”的文件。
rm -r dir1:删除整个名为“dir1”的目录。
cp:复制文件或目录。

5.cp file1 file2:将“file1”复制到“file2”。
cp -r dir1 dir2:将“dir1”及其内容复制到“dir2”。
mv:移动文件或目录。

6.mv file1 dir1:将“file1”移动到“dir1”中。
mv dir1 new_dir:将“dir1”重命名为“new_dir”。
touch:创建空文件或者修改文件访问时间和修改时间。

7.touch file1:创建一个名为“file1”的空文件。
touch -a file1:修改“file1”的访问时间。
touch -m file1:修改“file1”的修改时间。
cat:显示文件内容。

8.cat file1:显示“file1”的内容。
cat file1 file2:顺序显示“file1”和“file2”的内容。
grep:在文件中搜索特定的字符串。

grep “my text” file1:搜索“file1”中包含“my text”的行。

具体的命令讲解可以看我之前写的文章这里就不做过多讲解。本篇文章主要来学习基本I/O函数的使用。

二、文件描述符

在 Linux 系统中,每一个打开的文件或者流都会分配一个唯一的整数标识符,称为文件描述符。文件描述符是操作系统用来标识一个进程所持有的文件或者数据流的方式。

文件描述符是一个非负整数值,通常是一个小于或等于进程打开文件限制的值。标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的文件描述符分别为0,1和2。

文件描述符在打开文件和数据流时由操作系统赋予。当操作系统打开文件或数据流时,会分配一个文件描述符并返回给调用进程。进程可以使用此文件描述符进行读写操作。

三、open、read、write函数讲解

1.open函数

man手册查看用法:
Linux文件操作基础及基本I/O函数使用
在man手册中可以查看到所需要的头文件和函数原型。
函数原型:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

下面是open()函数的参数详解:

pathname:文件路径名字符串,为要打开的文件的绝对或相对路径名。

flags:打开标志位参数,可通过将不同的标志位进行按位或运算来组合使用,其值为以下标志位的按位或:

O_RDONLY:以只读方式打开文件。
O_WRONLY:以只写方式打开文件。
O_RDWR:以读写方式打开文件。
O_CREAT:如果文件不存在,则创建文件。必须与mode_t位运算标志位O_WRONLY、O_RDWR组合使用。
O_EXCL:如果同时设置了O_CREAT标志,而文件已经存在,则返回错误。
O_TRUNC:如果文件存在并且以写方式打开,则清空文件所有数据。
O_APPEND:以追加方式打开文件。在写入时,总是从文件末尾开始添加数据。
O_NONBLOCK:以非阻塞方式打开文件。如果文件没有准备好,那么读取操作和写入操作将直接返回错误而不是等待。
O_SYNC:由于写入将是同步的,因此所有上层缓存都将被刷新。这通常会降低文件I/O的性能。
O_DIRECTORY:要求pathname必须是一个目录。
mode:默认权限,指定了文件创建时的访问权限。它是一个八进制数,由三个低权限位(对应文件所有者、组和其它人)以及三个特殊位(SGID、SUID和sticky位)构成。特殊位通常默认设置为0。

在调用open()之后,如果文件打开成功,它将返回一个文件描述符(file descriptor)。返回的文件描述符就是要操作的文件句柄,我们可以使用它进行读、写等各种操作,如果返回-1则表示打开文件失败,此时可以使用errno来获取失败原因。

2.read函数

man手册查看用法:
函数原型:
read函数是Linux系统提供的输入函数之一,通常用于从文件或套接字中读取数据

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

参数解析:
fd:要读取数据的文件描述符,通常是打开文件时返回的文件描述符,也可以是套接字描述符等。
buf:读取数据后存储的位置,一般为一块已分配的内存地址。
count:要读取的字节数。
return值解释如下:

成功时,返回实际读取的字节数(可能小于count);
如果已经到达文件末尾,则返回0;
如果发生错误,则返回-1,并设置全局变量errno来指示发生的错误类型。
read函数在执行时有以下三种基本情况:

当count大于零时,read函数一直等待直到读取指定数量的字节,或者读取到文件末尾。

当count等于零时,read函数不会读取数据,而只是返回0。

当count小于零时,read函数将返回EINVAL错误。

需要注意的是,read函数是一个阻塞函数,如果在读取数据时没有足够的数据可用,它将一直等待直到读取指定数量的字节或者遇到错误。为了避免read函数一直等待的问题,可以使用非阻塞的I/O或者使用select等函数来监视可读取的数据。

3.write函数

man手册查看用法:
函数原型:
在Linux系统中,write()函数是一个用于向文件描述符(file descriptor)写入数据的系统调用函数。

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

参数解析:

fd:可通过open()函数或socket()函数创建。在Linux中,文件和设备都是通过文件描述符来访问的。例如,标准输入(standard input)的文件描述符是0,标准输出(standard output)的文件描述符是1,标准错误(standard error)的文件描述符是2。
buffer:指向要写入数据的缓冲区指针。注意,这里的缓冲区是指一个内存块,可以是栈上的数组变量、堆上动态分配的空间或静态分配的内存等。缓冲区最大长度为SSIZE_MAX,一般情况下为32767字节。
count:指定要写入的数据字节数。如果count为0,则write()函数不进行任何操作并返回0。如果count超过了缓冲区的长度,则只有缓冲区的长度部分的数据会被写入。

四、使用open、read、write操作标准输入输出

标准输入的文件路径是"/dev/stdin",标准输出的文件路径是"/dev/stdout"。使用open函数打开后会得到对应的文件标识符,得到文件描述符后就可以进行相应的读写操作了。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main(void)
{
    char buffer[100];
    ssize_t nread;

    // 打开标准输入文件描述符
    int fd = open("/dev/stdin", O_RDONLY);

    // 从标准输入读取数据
    nread = read(fd, buffer, sizeof(buffer) - 1);
    if (nread == -1) {
        printf("read err\n");
    }
    buffer[nread] = '\0';
    printf("Read %zd bytes from standard input: %s", nread, buffer);

    // 关闭标准输入文件描述符
    close(fd);

    // 打开标准输出文件描述符
    fd = open("/dev/stdout", O_WRONLY);

    // 向标准输出写入数据
    char msg[] = "Hello, World!\n";
    ssize_t nwritten = write(fd, msg, sizeof(msg));
    if (nwritten == -1) {
        printf("write err");
    }
    printf("Write %zd bytes to standard output: %s", nwritten, msg);

    // 关闭标准输出文件描述符
    close(fd);
    
    return 0;
}

执行效果:
Linux文件操作基础及基本I/O函数使用

总结

本篇文章先介绍了一下文件在Linux中的重要性,然后介绍了几个常用于文件操作的函数,并且使用这几个函数直接操作了标准输入和输出。文章来源地址https://www.toymoban.com/news/detail-427820.html

到了这里,关于Linux文件操作基础及基本I/O函数使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Linux】基本指令-入门级文件操作(一)

    目录 前言 ⭕linux的树状文件结构 ⭕绝对路径和相对路径 ⭕当前路径和上级路径 ⭕隐藏文件 基本指令(重点) 1 pwd 指令 2 mkdir 指令  3 touch 指令 4 ls 指令 4.1 ls只加选项不加文件/目录名,默认查看当前目录下的文件 4.1.1 ls -a:查看所有文件包括隐藏文件 4.1.2 ls -l / ll:

    2024年02月08日
    浏览(42)
  • Python基础语法(五)—— 文件基本操作(打开、写入、关闭、查找)

    我们平时所创建的变量都是保存在内存中的,我们知道如果重启应用或者重启机器,内存中的数据就会丢失。 如果想让数据能够持久化存储,就可以把数据保存到文件或者是数据库中。 比如windows上,通过后缀名可以看到常见的文件类型有: 可执行文件(exe) 文本文件(t

    2024年02月01日
    浏览(39)
  • 【linux】docker基本概念和基础指令操作(镜像、容器)

    docker 镜像 images xxxx(名称):xxxx(版本号) 每一个image可以生成若干个 容器 (container),所有用相同镜像生成的容器环境完全一样 每一个容器都是一个完全独立的云端服务器

    2024年02月01日
    浏览(52)
  • Linux标准IO对文件的基本操作(一)

    在Linux标准IO中,就是用 库函数 对文件进行操作。在C语言中有许多库函数方便用户去对文件进行操作。下面谈谈一些简单基本的函数,这些函数都是被包含在头文件 stdio.h 中的。 要操作一个文件,我们肯定先 打开 它,这里打开并不是去右键文件然后左键打开。这里的打开是

    2024年02月15日
    浏览(43)
  • C++基础:文件操作函数fopen()和fclose()

    fopen函数用于打开一个文件,并返回一个文件指针,该指针可以用于后续的文件操作。其定义如下: 其中,filename 为要打开的文件的名称,可使用绝对地址或相对地址表示; mode 为文件打开模式,主要包括:   r :以只读方式打开文件。文件必须存在;   w :以只写方式打开文件。

    2024年01月20日
    浏览(25)
  • 【linux】:模拟文件基本操作以及文件在磁盘中如何存储的学习

        文章目录 前言 一、模拟C库文件操作 二、磁盘文件 总结   经过我们上一篇对linux系统文件操作的学习想必我们已经会使用系统文件接口了,今天我们就用系统文件接口来封装一个像C语言库那样的文件操作函数的函数来加深我们对文件操作的学习。   首先我们创建相应的

    2023年04月14日
    浏览(44)
  • Linux基本操作和基础命令(Linux修改IP地址以及修改网卡地址)

    今天博主和大家聊一聊 Linux的基本操作,不喜勿喷,如有建议欢迎补充,讨论。 一.Linux网络 1.网卡的命名规则 CENTOS7采用dmidecode采集命名方案,以此来得到主板信息;它可以实现网卡名字永久唯一化 2.对网路设备的命名方式 1.如果Firmware(固件)或BIOS为主板上集成的设备提供

    2023年04月16日
    浏览(42)
  • 【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

    在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 1.1 原型、参数及返回值说明 1.1.1 原型: open()函数是Linux系统

    2024年02月12日
    浏览(46)
  • Linux(Centos7)基本操作(1):文件压缩和解压(tar、zip)

    安装命令 yum install -y unzip zip 压缩文件: 基本格式: zip [参数] [压缩后的文件名] [打包的目录路径] 压缩文件:xxx是当前路径中需要压缩的文件夹: zip -r xxx.zip xxx/ ; 比如需要压缩文件夹 a 下所有的内容,就执行 zip -r a.zip a ; 如果是将其他目录下的文件压缩到当前路径,xxx前面

    2024年02月08日
    浏览(53)
  • 数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

      头文件和源文件分开有很多好处:可以提高编译速度、提高代码的可维护性、提高代码的可重用性和可扩展性,同时也可以使代码结构更清晰,方便代码的管理和维护。 LinkList.h test.cpp                  (下面所有函数都默认在类中实现)   我们以

    2024年02月07日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包