常用对文件编程的操作如open、read、write
1. open用法
2. write用法
3.read用法
4.补充说明读数据光标(lseek)位置处理
5.其他函数的补充
参数说明:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname:要打开的文件名(含路径,缺省为当前路径)
Flags:O_RDONLY只读打开 O_WRONLY只写打开 O_RDWR可读可写打开
当我们附带了权限后,打开的文件就只能按照这种权限来操作。
以上这三个常数应当只指定一个。下列常数是可选择的。
O_CREAT 若文件不存在则创建它,
O_EXCL如果同时指定了O_CRETA,而文件已存在,则出错。
O_APPEND每次写时都加到文件的尾端。
O_TRUNC属性去打开文件时,如果这个文件中本来有内容的,而且为只读或只写成功打开。则将长度截断为0;
Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限
头文件:
#include
#include
#include
代码样列:
int main()
{
int fd;
fd= open("./fles1",O_RDWR); //fd代表文件描述符
// 当文件不存在的时候用 O_CREAT来重新创建
fd=open("./fles1",O_RDWR|O_CREAT,0600);//0600代表文件的权限
//当文件存在时,使用O_EXCL会报错
fd=open("./fles1",O_RDWR|O_EXCL);
//如果原来的文件中已存在数据,使用O_APPEND的时候,会原来数据基础上换行,加入新的数据。
fd=open("./fles1",O_RDWR|O_APPEND);
//如果这个文件中本来有内容的,则使用O_TRUNC之后,文件的内容将会全部清除
fd=open("./fles1",O_RDWR|O_TRUNC);
printf("fd=%d\n",fd);
return 0;
}
头文件:
#include
原型函数:
ssize_t write(int fd, const void *buf, size_t count);
//fd:是指文件描述符
// buf:写入的缓冲区(将缓冲区的数据写入fd里)
//count:写入的字节计数
//返回值:成功返回写入的字节数,出错返回-1并设置errno
代码示例:
int main()
{
char *buf="luhengnizhenshuai";
int fd;
fd= open("./fles1",O_RDWR);
write(fd,buf,strlen(buf));//将buf里面的数据写入到fd里面
close(fd);//来关闭文件,防止对文件造成损害或者破坏
return 0;
}
头文件:
#include
原型函数:
ssize_t read(int fd, void *buf, size_t count);
//fd:是指文件描述符
// buf:读取的缓冲区(将缓冲区写入的数据读取)
//count:读取的字节计数
//返回值:成功返回写入的字节数,出错返回-1并设置errno
代码示例:
int main()
{
char *buf="luhengnizhenshuai";
int fd;
fd= open("./fles1",O_RDWR);
int n_write=write(fd,buf,strlen(buf));//将buf里面的数据写入到fd里面
char *readbuf=(char *)malloc(sizeof(char)*n_write+1);
int n_read=read(fd,readbuf,n_write);//读取文文件写入的数据
printf("read=%d conext:%s\n",n_read,readbuf);//输出读取多少字节数据,输出读取到的数据是啥
close(fd);//不管是写入还是读取,都要来关闭文件,防止对文件造成损害或者破坏
return 0;
}
头文件:
#include
#include
函数原型:
off_t lseek(int fd, off_t offset, int whence);
//fd:是指文件描述符
//offset:偏移值
//whence:所要偏移值的位置
whence:
1.SEEK_SET 代表是指向文件的头
2.SEEK_END 代表是指向文件的尾
3.SEEK_CUR 代表是指向当前文件的位置
代码示例:
#include
#include
#include
#include
#include
#include
#include
int main()
{
int fd;
//int creat(const char *pathname, mode_t mode);
fd=creat("./flel",S_IRWXU);//创建一个名为flel的文件
return 0;
}