美文网首页
linux 内核编程 - 文件IO与文件描述符

linux 内核编程 - 文件IO与文件描述符

作者: Peakmain | 来源:发表于2019-10-09 10:51 被阅读0次

系统调用

虚拟内存布局图.png

3-4G是系统的空间,这部分是由操作系统来管理,如果我们要操作这部分数据,只能借助系统提供的一些函数(系统函数),调用这些函数就称为系统调用


系统调用.png

普通函数和内核函数

  • 查看帮组文档
man 2 open

man表示帮组文档 2表示系统 open表示要查看open文档

  • open
  int open(const char *path, int oflag, mode_t mode);

path:路径名字
oflag:O_APPEND追加,O_CREAT:没有的时候会创建,O_TRUNC:会截断
mode:就是创建时的文件权限,只是当前用户可读可写,S_IRUSRIS_IWUSR,返回的是一个文件句柄fd,我们直接通过fd来操作

  • close:关闭文件
int close(int fd)
  • write
ssize_t write(int fildes, void *buf, size_t nbyte);

fildes:句柄
buf:写入的缓冲区
nbyte:每次写多少字节
ssize_t:返回的是写入的真实个数

  • read
ssize_t read(int fildes, void *buf, size_t nbyte);

fildes:句柄
buf:读入的缓冲区
nbyte:每次读多少字节
ssize_t:返回的是读到的真实个数

  • 获取错误的信息
    会有一个宏定义errno,通过strerror(error)获取错误信息,需要打印错误信息perror
man 3 terror
void perror(const char *s);

s:错误信息的描述

  • 拷贝文件
    1.系统函数:open,close,read,write
    2.普通函数:fopen,fclose,fread/fputc,fwrite/fgetc


    系统函数和普通函数

文件描述符表

文件描述符.png

lseek和fseek

用来获取偏移量SEEK_START,SEEK_END,SEEK_CUR
lseek它的便移量,读和写是同一个

off_t lseek(int fildes, off_t offset, int whence);

stat和lstat

 int stat(const char *path_name, struct stat *restrict buf);
 int lstat(const char *restrict path, struct stat *restrict buf);

目录操作

判断文件目录是否存在和打开目录下的文件

#include<stdio.h>
#include<errno.h>
#include<dirent.h>
#include<stat.h>

bool isdir(const char* fileName){
    //int stat(const char *pathname, struct stat *buf);
    strcut stat buf;
    stat(fileName, &buf);
    mode_t st_mode = buf.st_mode;
    return S_ISDIR(st_mode);
}

int main(int argc, char *argv[]){
    // 打开目录
    DIR *dir = opendir(argv[1]);
    if (dir == NULL){
        perror("open dir fial");
        return -1;
    }

    // struct dirent *readdir(DIR *dirp);
    struct dirent* dirp;
    while ((dirp = readdir(dir)) != NULL){
        // printf("%s\t",dirp->d_name);
        // 一个递归
    }
    printf("\n");
    return 0;
}

相关文章

  • linux 内核编程 - 文件IO与文件描述符

    系统调用 3-4G是系统的空间,这部分是由操作系统来管理,如果我们要操作这部分数据,只能借助系统提供的一些函数(系...

  • Linux中文件描述符,重定向与标准输入输出

    Linux中文件描述符,重定向与标准输入输出 文件描述符:内核(kernel)利用文件描述符(file descr...

  • Linux I/O复用——epoll()

    编程TWO编程小兔崽今天 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路...

  • 2.文件的描述符和重定向

    文件描述符是和文件的输入、输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descr...

  • 第一章 文件I/O

    Linux中的文件 文件、文件描述符和文件表 Linux内核将一切视为文件,狭义上是指文件系统系统中的物理文件,广...

  • Linux 高级IO

    [TOC] Linux 高级IO 涉及到一些IO的高级用法 文件描述符重定向 dup 函数从当前可用的文件描述符中...

  • 文件描述符

    文件描述符简介 在linux系统中,一切皆文件,当进程打开现有文件或者创建新文件时,内核向进程返回一个文件描述符,...

  • Linux/IO学习笔记

    相关知识 Linux中一切类型都被抽象成文件,故Linux都是文件描述符 内存被划分为:内核态和用户态,数据在内核...

  • Linux编程学习笔记 | Linux IO学习[2] - 标准

    在上一篇Linux编程学习笔记 | Linux IO学习[1] - 文件IO中,我总结了Linux下的文件IO。文...

  • Linux操作系统进程与文件的关系

    本文重点介绍一下Linux操作系统进程(线程)与文件描述符、文件的关系,具体到内核部分就是task_struct、...

网友评论

      本文标题:linux 内核编程 - 文件IO与文件描述符

      本文链接:https://www.haomeiwen.com/subject/zsmbpctx.html