打开文件:
open()
int open(const char *filename, int flag[, mode_t mode]);
头文件fcntl.h
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
char path[] = "aaa";
int fd = 0;
umask(0000); //设置umask,方便设置文件的存储权限
fd = open(path, O_RDWR|O_CREAT, 0660); //调用open函数打开文件,并且得到文件描述符
if(fd == -1)
{
printf("can not open this file");
exit(0);
}
printf("open file success, fd = %d", fd);
return 0;
}
该函数的参数:
filename: 打开的文件名
flag: 文件的打开方式
可以使用宏参数:
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_CREAT 如果打开的文件不存在则创建
O_EXCL 如果用O_CREAT打开,但文件存在则打开失败
参数可以使用位或(|)的方式组合
函数的返回值:成功返回文件描述符,失败返回-1
关闭文件
cloae()
int close(int fd);
头文件 unistd.h
fd: 需要关闭的文件的文件描述符
返回值:
-1 失败 0 成功
读文件:
read()
ssizt_t read(int fd, void *buffer, size_t size);
头文件:
unistd.h
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(void)
{
char path[] = "aaa";
int fd = 0;
umask(0000); //设置umask,方便设置文件的存储权限
char buf[400]; //读文件的缓冲区
int result = 0 //读文件的返回值
int c = 0; //关闭文件的返回值
memset(buf, '\0', sizeof(buf));
fd = open(path, O_RDWR|O_CREAT, 0660); //调用open函数打开文件,并且得到文件描述符
if(fd == -1)
{
printf("can not open this file");
exit(0);
}
printf("open file success, fd = %d", fd);
result = read(fd, buf, sizeof(buf)); //读文件
if(result == -1)
{
printf("read fail\n"); //如果返回值是-1则读取失败
exit(0);
}
printf("read success, the content is\n");
printf("%s\n", buf);
c = close(fd); //关闭文件
printf("close %d", c);
return 0;
}
参数
fd: 文件描述符
buffer: 数据缓冲区
count: 读取的字节数
返回值
返回读取的字节数 如果读到文件结束返回0 如果读取失败返回-1
写文件
write()
ssize_t write(int fd, const char *buffer, size_t size);
头文件
unistd.h
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
char path[] = "aaa";
int fd = 0;
char buf[] = "hello";
int result = 0;
int c = 0;
fd = open(path, O_RDWR|O_CREAT); //调用open函数打开文件,并且得到文件描述符
if(fd == -1)
{
printf("can not open this file");
exit(0);
}
printf("open file success, fd = %d", fd);
result = write(fd, buf, sizeof(buf));
printf("write %d\n", result);
close(fd);
return 0;
}
用一个描述符设置文件定位
lseek()
off_t lseek(int fd, off_t offset, int whence);
头文件
unistd.h
sys/types.h
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(void)
{
char path[] = "aaa";
int fd = 0;
umask(0000); //设置umask,方便设置文件的存储权限
char buf[400]; //读文件的缓冲区
int result = 0 //读文件的返回值
int c = 0; //关闭文件的返回值
memset(buf, '\0', sizeof(buf));
fd = open(path, O_RDWR|O_CREAT, 0660); //调用open函数打开文件,并且得到文件描述符
if(fd == -1)
{
printf("can not open this file");
exit(0);
}
printf("open file success, fd = %d", fd);
int off = lseek(fd, 4, SEEK_SET); //将文件位子描述符从文件头部向后偏移4个字节
result = read(fd, buf, sizeof(buf)); //读文件
if(result == -1)
{
printf("read fail\n"); //如果返回值是-1则读取失败
exit(0);
}
printf("%d\n", off);
printf("%s\n", buf);
c = close(fd); //关闭文件
printf("close %d", c);
return 0;
}