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);