C语言 Linux 文件函数总结

函数名含义及用法
fopen

#include<stdio.h>

FILE* fopen(const char* pathname,const char* mode);//文件名//模式

模式:rb(只读)rb+(读写)wb(只写,可创建)wb+(读写,可创建)ab(二进制只写)ab+(二进制读写)

返回文件流

fclose

#include<stdio.h>

int fclose(FILE* stream);//文件流

返回 0 成功关闭文件,返回EOF关闭文件失败

fread

#include<stdio.h>

size_t fread(void* ptr,size_t size, size_t nmemb,FILE* stream);//数组指针//单个元素的字节大小//读取元素个数//文件流

返回读取元素个数

fwrite

#include<stdio.h>

size_t fread(void* ptr,size_t size, size_t nmemb,FILE* stream);//数组指针//单个元素的字节大小//写入元素个数//文件流

返回写入元素个数

fprintf

#include<stdio.h>

int fprintf(FILE* stream,const char* format, ...);//文件流//const字符数组指针//变量

将格式化后的字符串写入到文件流stream中

fscanf

#include<stdio.h>

int fscanf(FILE* stream,const char* format, ...);//文件流//const字符数组指针//变量

将文件流stream中的数据格式化赋值到指定变量

sprintf

#include<stdio.h>

int sprintf(char* str,const char* format, ...);//字符数组指针//const字符数组指针//变量

将格式化后的字符串写入到字符串数组str中

sscanf

#include<stdio.h>

int sscanf(const char* str,const char* format, ...);//const字符数组//const字符数组指针//变量

将const字符数组str中的数据格式化赋值到指定变量

fgetc

#include<stdio.h>

int fgetc(FILE* stream);//文件流

一次从文件流中获取一个字符

fputc

#include<stdio.h>

int fputc(int c,FILE* stream);//ASCII码字符//文件流

一个字符c输入到文件流中

fgets

#include<stdio.h>

int fgets(char* s,int  size,FILE* stream);//字符串//字符串长度//文件流

一次从文件流中获取一个长度为size的字符串

fputs

#include<stdio.h>

int fputs(const char* s,FILE* stream);//const字符串//文件流

一个字符串s输入到文件流中

feof

include<stdio.h>

int feof(FILE* stream);//文件流

若文件流传回空指针该函数返回非0,反之返回0

fseek

include<stdio.h>

int fseek(FILE* stream,long offset,int whence);//文件流//偏移量//指定位置

whence可以是:SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件末尾)

设置当前读写位置到离whence长度为offset的位置

ftell

include<stdio.h>

long ftell(FILE* stream);//文件流

获取文件流当前的读写位置

rewind

include<stdio.h>

void rewind(FILE* stream);//文件流

将文件流的读写位置移至文件开头

chmod

#include<sys/stat.h>

int chmod(const char* path,mode_t mode);//文件名或路径//八进制整形表示文件权限

getcwd

#include<unistd.h>

char* getcwd(char* buf,size_t size);//字符串指针//字符串长度

获取当前目录到buf

chdir

#include<unistd.h>

int chdir(const char* path);//目录名

将当前工作目录改变至path所指的目录

mkdir

#include<sys/stat.h>

#include<sys/types.h>

#include<unistd.h>

int mkdir(const char* pathname,mode_t mode);//创建目录名//权限

创建一个目录

rmdir

#include<sys/stat.h>

#include<sys/types.h>

#include<unistd.h>

int rmdir(const char* pathname);//目录名

删除目录

struct dirent

struct dirent

{

        ino_t d_ino;//该文件的inode

        off_t d_off;//到下一个dirent的偏移量

        unsigned short d_reclen;//文件名长度

        unsigned char d_type;//所指的文件类型

        char d_name[256];//文件名

};

目录结构体

opendir

#include<sys/types.h>

#include<dirent.h>

DIR* opendir(const char* name);//目录名

打开一个目录

closedir

#include<sys/types.h>

#include<dirent.h>

int closedir(DIR* dir);//目录流

关闭目录文件

readdir

#include<sys/types.h>

#include<dirent.h>

struct dirent* readdir(DIR* dir);//目录流

读取目录的信息,并返回目录信息结构体指针

rewinddir

#include<sys/types.h>

#include<dirent.h>

void rewinddir(DIR* dir);//目录流

重新定位到目录文件的头部

seekdir

#include<sys/types.h>

#include<dirent.h>

void seek(DIR* dir,off_t offset);//目录流//指定位置

设置目录流当前的读取位置

telldir

#include<sys/types.h>

#include<dirent.h>

off_t telldir(DIR* dir);//目录流

返回目录流当前的读取位置

stat

#include<sys/types.h>

#include<sys/stat.h>

#include<unistd.h>

int stat(const char* pathname,struct stat* buf);//文件名//文件状态结构体指针

获取文件状态

fstat

#include<sys/types.h>

#include<sys/stat.h>

#include<unistd.h>

int fstat(int fd,struct stat* buf);//文件描述符//文件状态结构体指针

获取文件状态

struct stat

struct stat

{
               dev_t     st_dev;//若是设备,返回设备表述符,否则0
               ino_t     st_ino;//i节点号
               mode_t    st_mode;//文件类型
               nlink_t   st_nlink;//链接数
               uid_t     st_uid;//属主ID
               gid_t     st_gid;//组ID
               dev_t     st_rdev;//设备类型
               off_t     st_size;//文件大小用字节表示
               blksize_t st_blksize;;//块大小
               blkcnt_t  st_blocks;块数,一个块512B

           #define st_atime st_atim.tv_sec//最后访问时间
           #define st_mtime st_mtim.tv_sec//最后修改时间
           #define st_ctime st_ctim.tv_sec//最后权限修改时间

};

open

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int open(const char* pathname,int flags);//文件名//打开方式

int open(const char* pathname,int flags,mode_t mode);//文件名//打开方式//权限

打开方式和权限用掩码表示

打开或创建打开一个文件并返回该文件描述符

creat

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int creat(const char* pathname,mode_t mode);//文件名//权限

创建一个文件并返回文件描述符

read

#include<unistd.h>

ssize_t read(int fd,void* buf,size_t count);//文件描述符//缓冲区//长度

write

#include<unistd.h>

ssize_t write(int fd,const void* buf,size_t count);//文件描述符//缓冲区//长度

ftruncate

#include<unistd.h>

int ftruncate(int fd,off_t length);//文件描述符//指定文件长度

将参数fd指定的文件大小改为参数length指定大小

mmap

#include<sys/mman.h>

void* mmap(void* adr,size_t len,int prot,int flag,int fd,off_t off);

//指定存储区的起始地址,设置为NULL,系统自动分配

//长度

//权限参数PROT_READ,PROT_WRITE表示可读可写

//MAP_SHARED

//文件描述符

//偏移量,一般设为0

可以实现直接将一个磁盘文件映射到存储空间的一个缓冲区上面,无需使用read和write进行IO

lseek

#include<sys/types.h>

#include<unistd.h>

off_t lseek(int fd,off_t offset,int whence);//文件描述符//偏移量//指定位置

whence可以是:SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件末尾)

将文件指针设定到相对于whence偏移offset的位置返回读写点距离文件开始的长度

dup

#include<unistd.h>

int dup(int oldfd);//文件描述符

复制文件描述符,并返回一个新的文件描述符,新文件描述符是旧的文件描述符的拷贝

dup2

#include<unistd.h>

int dup2(int oldfd,int newfd);//文件描述符//文件描述符

复制文件描述符,并返回一个新的文件描述符,新文件描述符是旧的文件描述符的拷贝

select

#include<sys/select.h>

#include<sys/time.h>

int select(int maxfd,fd_set* readset,fd_set* writeset,fd_set* exceptionset,struct timeval* timeout);

//最大的文件描述符

//内核读操作的描述符字集合

//内核写操作的描述符字集合

//内核异常操作的描述符字集合

//等待描述符就绪需要多少时间,0代表不等待,NULL代表永久等待,检查描述字之后立即返回

集合的相关操作

void FD_ZERO(fd_set* fdset);//将所有fd清零

void FD_SET(int fd,fd_set* fdset);//增加一个fd

void FD_CLR(int fd,fd_set* fdset);//删除一个fd

int FD_ISSET(int fd,fd_set* fdset);//判断一个fd是否有设置

掩码含义
O_RDONLY以只读方式打开
O_WRONLY以只写方式打开
O_RDWR以读写方式打开
O_CREAT若文件不存在,则创建文件
O_EXCL仅与O_CREAT连用,若文件已存在,则open失败
O_TRUNC若文件存在,将文件长度截至0
O_APPEND以追加的方式打开,每次调用write时,文件指针自动移至文件末尾,用于多进程写进同一个文件的情况

O_NONBLOCK

O_NDELAY

对管道,设备文件和socket使用,以非阻塞方式打开文件,无论有无数据读取或等待,都会立即返回进程之中
O_SYNC同步打开文件,只有在数据被真正写入物理设备后才返回
O_ASYNC对管道,设备文件和socket使用,开启信号驱动IO,可读或可写发送信号
宏定义文件描述符含义
STDIN_FILENO值为0,标准输入
STDOUT_FILENO值为1,标准输出
STDERR_FILENO值为2,标准错误输出

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值