系统调用&文件描述

一、系统调用

1、open打开文件

cpp 复制代码
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
int main()
{
    /*
    const char *__file 打开文件的路径
    int __oflag 打开文件的模式
    【1】O_RDONLY 只读模式
    【2】O_WRONLY 只写模式
    【3】O_RDWR 读写模式
    【4】O_CREAT 如果不存在创建文件
    【5】O_APPEND 追加写模式
    【6】O_TRUNC 截断文件长度为0
    ...可变参数:O_CREAT 创建文件的权限 0664
    return:文件描述符 如果打开文件失败返回-1 同时设置全局变量errno表示对应的错误
    int open(const char *__file, int __oflag, ...)
    */
    int fd=open("io1.txt",O_RDONLY | O_CREAT,0664);
    if (fd==-1)
    {
        printf("打开文件失败\n");
    }
    
    return 0;
}

MakeFile

cpp 复制代码
unistd_test:unistd_test.c
	-$(CC) -o $@ $^ 
	-./$@
	-rm ./$@

2、read

3、write

4、close

5、exit

6、练习

读取io.txt文件内容

cpp 复制代码
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>

int main()
{
    //打开文件
    int fd = open("io.txt",O_RDONLY);
    if (fd == -1)
    {
        perror("open");
        exit(EXIT_FAILURE);
    }

    char *buf[1024];
    ssize_t bytes_read;
    bytes_read=read(fd,buf,sizeof(buf));
    if (bytes_read == -1)
    {
        perror("read");
        close(fd);
        exit(EXIT_FAILURE);
    }
    ssize_t bytes_write;
    while (bytes_read > 0)
    {
        bytes_write=write(STDOUT_FILENO,buf,bytes_read);
        bytes_read=read(fd,buf,sizeof(buf));
    }
    
    if (bytes_write == -1)
    {
        perror("write");
        close(fd);
        exit(EXIT_FAILURE);
    }
    close(fd);


    return 0;
}

Makefile

cpp 复制代码
system_call_test:system_call_test.c
	-$(CC) -o $@ $^
	-./$@
	-rm ./$@

二、文件描述符

1、定义

2、struct file

3、struct path

4、struct inode

5、文件描述符表关联的数据结构

6、文件描述符引用图解

相关推荐
毕竟是shy哥10 小时前
vs code连接远程服务器docker环境及配置免密登录
服务器·docker·vs code
徐小黑ACG11 小时前
nginx配置文件
linux·服务器·nginx
新时代牛马11 小时前
Linux VFS 完整篇:从path_openat、dentry/inode 到page cache 与挂载排障
linux·运维·服务器
java_logo11 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
拂拉氏11 小时前
【知识讲解】 Linux虚拟地址空间认识
linux·虚拟地址空间
cloudfantasy13 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker
新时代牛马13 小时前
Linux 驱动中断与定时完整篇:从 request_threaded_irq 到hrtimer 选型与排障
linux·运维·服务器
考虑考虑14 小时前
nginx打印请求日志
运维·后端·nginx
数字补给站15 小时前
Windows 10 + Hyper-V + Terraform + cloud-init:批量产出 3 台 Ubuntu 的实践笔记
运维·ai编程
分支预测失败15 小时前
RISC-V 核间中断 IPI 实战:从 MSIP 寄存器到 IMSIC 消息投递
linux·后端