Linux文件操作

文件操作:
打开: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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值