linux学习(文件描述符)[11]

一切皆文件

在这里插入图片描述
用代码创建的文件,默认路径在可执行文件同级目录下(本质是进程通过系统接口创建的)
在这里插入图片描述

文件宏

在Linux下,有一些与文件操作相关的宏可以用于处理文件描述符和文件权限。以下是一些常用的文件宏:

  1. STDIN_FILENO:表示标准输入的文件描述符,其值为0。
  2. STDOUT_FILENO:表示标准输出的文件描述符,其值为1。
  3. STDERR_FILENO:表示标准错误输出的文件描述符,其值为2。

这些宏用于表示标准输入、标准输出和标准错误输出的文件描述符。

另外,还有一些与文件权限相关的宏,用于设置文件的权限:

  1. S_IRUSR:表示用户(文件所有者)读权限。
  2. S_IWUSR:表示用户写权限。
  3. S_IXUSR:表示用户执行权限。

类似地,还有S_IRGRPS_IWGRPS_IXGRP分别表示组读、写和执行权限,以及S_IROTHS_IWOTHS_IXOTH分别表示其他用户读、写和执行权限。

这些宏可以与open()函数中的mode参数一起使用,以设置文件的权限。

例如,以下代码片段演示了如何使用这些宏来打开一个文件并设置其权限:

#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd = open("file.txt", O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
    if (fd == -1) {
        // 处理文件打开失败的情况
    }

    // 写入数据到文件
    const char *data = "Hello, World!";
    write(fd, data, strlen(data));

    // 关闭文件
    close(fd);

    return 0;
}

在上面的示例中,open()函数使用O_CREAT选项创建一个新文件,O_WRONLY选项指定文件只能用于写入。S_IRUSR | S_IWUSR设置了文件的权限,使得用户具有读和写的权限。

std

在Linux下,stdinstdoutstderr是与文件操作相关的特殊文件描述符。它们分别对应标准输入、标准输出和标准错误输出。

以下是与文件操作相关的一些std系列函数:

  1. int open(const char *pathname, int flags, mode_t mode):打开一个文件,并返回一个文件描述符。pathname是文件路径,flags是打开模式,mode是文件权限。返回的文件描述符可以用于后续的文件操作。

  2. ssize_t read(int fd, void *buf, size_t count):从文件描述符fd中读取数据,并将其存储到缓冲区buf中。count是要读取的字节数。返回值是实际读取的字节数。

  3. ssize_t write(int fd, const void *buf, size_t count):将数据从缓冲区buf写入到文件描述符fd中。count是要写入的字节数。返回值是实际写入的字节数。

  4. int close(int fd):关闭文件描述符fd

这些函数允许您在Linux系统中进行文件的打开、读取和写入操作。

至于为什么stdin是0,stdout是1,stderr是2,这是因为在Unix/Linux系统中,每个进程都有一个文件描述符表,其中前三个文件描述符分别是0、1和2。这是由于历史原因和Unix的设计惯例。

  • stdin(标准输入)的文件描述符是0,用于接收用户的输入。
  • stdout(标准输出)的文件描述符是1,用于输出程序的正常输出。
  • stderr(标准错误输出)的文件描述符是2,用于输出程序的错误信息。

这种约定使得程序可以使用简单的方式将输出重定向到文件或其他设备,例如将输出重定向到文件中:./program > output.txt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
fd在内核中本质是一个数组小标
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值