文件操作:
打开:fopen
关闭:fclose
读: fread
写: fwrite
跳转:fseek
写入:fprintf
创建:creat
打开:int open(const char *pathname, int flags, mode_t mode);
O_TRUNC 打开的时候清空文件内容
O_EXCL 创建的时候如果文件已存在则报错
O_CREAT 创建
O_APPEND 追加
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 以读写模式打开文件
设置文件创建权限掩码:umask(int)
判断文件是否存在或者是否有权限:
int access(const char *pathname, int mode);
F_OK 判断文件是否存在
R_OK W_OK X_OK 判断文件现在是否具有指定权限
关闭:close(int fd)
跳转:off_t lseek(int fd, off_t offset, int whence);
whence:
SEEK_SET 起始位置
SEEK_CUR 读写指针当前位置
SEEK_END 文件末尾
读:ssize_t read(int fd, void *buf, size_t count);
写:ssize_t write(int fd, const void *buf, size_t count);
获取文件属性:int stat(const char *path, struct stat *buf);
截断文件: int truncate(const char *path, off_t length)
将文件指针转换为文件描述符:int fileno(FILE *stream);
将文件描述符转换为文件指针:FILE *fdopen(int fd, const char *mode);
删除文件:unlink//
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
//int errno;表示上一个函数执行结果的错误编号
int main()
{
int fd = -1;
/*
if(access("./test.txt",F_OK) == 0)
{
printf("file test.txt is already exists!\n");
unlink("./test.txt");
}
*/
//对文件的默认创建权限掩码进行清0
umask(0);
//open(文件名,文件访问权限, 文件权限);
//O_CREAT 若文件不存在则创建
//O_RDWR 文件访问的读写权限
//O_APPEND 以追加内容的方式打开文件
//O_EXCL 若创建文件的时候文件存在则报错退出
fd = open("./test.txt", O_RDWR | O_CREAT, 0777);
if (fd < 0)
{
perror("open error!");
printf("open file:[%s] error:%s\n", "test.txt", strerror(errno));
return -1;
}
lseek(fd, 0, SEEK_END);
char buff[1024] = "shenlanfile...\n";
int w_len = write(fd, buff, strlen(buff));
printf("write len:[%d]\n", w_len);
lseek(fd, 0, SEEK_SET);
char tmp[1024] = { 0 };
int r_len = read(fd, tmp, 1024);
printf("read len:[%d],read buff:[%s]", r_len, tmp);
struct stat st;
if (fstat(fd, &st) < 0)
{
perror("get stat error!");
return -1;
}
printf("file:[%s],size:[%ld]\n", "test.txt", st.st_size);
ftruncate(fd, 7);
close(fd);
return 0;
}