系统调用&文件描述

一、系统调用

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、文件描述符引用图解

相关推荐
且从容.几秒前
ubuntu安装flink
linux·ubuntu·flink
数字新视界1 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落2 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨2 小时前
WSL2的安装与使用
linux·wsl
微小的鱼2 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng2 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹3 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_3 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_3 小时前
云原生基础之Containerd容器运行时
运维·云原生