系统调用文件操作以及C基于流的文件操作 所涉及的函数解析

Linux文件类型的种类?
普通文件、目录文件、设备文件、管道文件、套接字和链接文件等等

常见系统调用文件操作?
open(),creat(),close(),read(),write(),lseek(),fcntl(),access()等

常见基于流的文件操作?
fopen(),fclose(),fread(),fwrite(),fseek() 等

在处理设备、管道、网络套接字和其他特殊类型的文件的时候,必须使用系统调用I/0方法


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/*
成功返回文件描述fd
pathname 欲打开文件路径字符串
flages 对文件操作的标志
mode 新建文件访问权限
*/
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

在这里插入图片描述
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/*
成功返回文件描述fd
pathname 欲打开文件路径字符串
mode 新建文件访问权限
*/
int creat(const char *pathname, mode_t mode);

creat()相当于open(使用了参数flags等于O_CREAT |O_WRONLY|O_TRUNC)


#include <unistd.h>
/*
成功返回读取字节数
fd 读取文件的文件描述符
buf 读取字节的写入内存地址
count 读取的字节数
*/
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);


#include <sys/types.h>
#include <unistd.h>

/*
成功返回指定文件的读写位置
fildes 文件描述符
offset 移动偏移量
whence 移动的起始位置
*/
off_t lseek(int fildes, off_t offset, int whence);
SEEK_SET 从文件头开始计算,文件指针移动到offset个字节位置。
SEEK_CUR 从文件指针当前位置开始计算,向后移动offset个字节的位置。
SEEK_END 文件指针移动到文件结尾


#include <unistd.h>

/*
判断文件拥有的权限:成功返回0满足文件权限参数
pathname 欲打开文件路径字符串
mode 文件权限参数
*/
int access(const char *pathname, int mode);
R_OK 判断文件是否有读权限。
W_OK 判断文件是否有写权限。
X_OK 判断文件是否有可执行权限
F_OK 判断文件是否存在


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

/*
成功返回0满足文件权限参数
fd 文件描述符
cmd 指定函数的操作
lock 文件锁操作结构体
*/
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);


#include <stdio.h>

/*
成功返回文件指针
path 文件路径名
mode 文件打开模式
*/
FILE *fopen(const char *path, const char mode);
/

成功返回0
fp 文件指针
*/
int fclose(FILE *fp);

在这里插入图片描述
#include <stdio.h>

int fgetc(FILE *stream); //成功返回读取的字符的int值

int fputc(char buf,FILE *stream); //成功返回写入的字符的值

fgetc()和fputc()分别还有另外一个别名getc()和putc(),它们的使用方法和功能是完全一样的,只是后者是前者的宏定义的别名 。


#include <stdio.h>

/*
成功返回读取的字符串
s 存放读出来的字符串的地址
size 一次最多读取n个字符
stream 文件指针
*/
char *fgets(char *s, int size, FILE *stream);

/*
成功返回非负整数
s 要写入文件的字符串
*/
int fputs(const char *s, FILE *stream);


#include <stdio.h>
/*
成功返回读取(写入)的数据块的数量
ptr 要读取(写入)的数据的地址
size 数据块的大小
nmemb 要读取(写入)的数据块的数目
stream 读取(写入)文件指针
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);


#include <stdio.h>

/*
成功返回实际写入(读取)文件的字符数
stream 文件指针
format 字符串格式
*/
int fprintf(FILE *stream, const char *format, …);
int fscanf(FILE *stream, const char *format, …);


#include <stdio.h>
/*
成功返回0
offset 移动偏移量
whence 移动的起始位置
*/
int fseek(FILE *stream, long offset, int whence);
SEEK_SET 从文件头开始计算,文件指针移动到offset个字节位置。
SEEK_CUR 从文件指针当前位置开始计算,向后移动offset个字节的位置
SEEK_END 文件指针移动到文件结尾

#include <stdio.h>
//获得当前指针位置的函数
//成功返回当前位置
long ftell(FILE *stream);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值