文件打开创建补充
(1)O_EXCL
O_EXCL和O_CREAT配合使用
若文件不存在则创建文件
若文件存在则返回-1
代码演示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{int fd;fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);if(fd==-1){printf("file exit\n");}return 0;
}
(2)O_APPEND
每次写的时候都加到文件尾端,若没有O_APPEND,则写入的东西会把原来文件中的数据覆盖掉
代码演示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";//将要写入文件的内容fd=open("./file1",O_RDWR|O_APPEND);int n_write=write(fd,buf,strlen(buf));printf("write %d\n ",n_write);close(fd);return 0;
}
(3)O_TRUNC
如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。
代码演示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";fd=open("./file1",O_RDWR|O_TRUNC);int n_write=write(fd,buf,strlen(buf));printf("write %d\n ",n_write);close(fd);return 0;}
(4)creat()函数创建文件
int creat(const char *pathname, mode_t mode);
pathname:要创建的文件名(包含路径,当前路径)
mode:创建模式 //可读可写可执行
文件的返回值也是文件描述符
宏表示 | 数字 和 含义 |
---|---|
S_IRUSR | 4 ------------------可读 |
S_IWUSR | 2-------------------可写 |
S_IXUSR | 1----------------可执行 |
S_IRWXU | 7----可读可写可执行 |
代码演示
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";fd=creat("/home/CLC/file1",S_IRWXU);return 0;
}
文件操作原理简述
文件描述符:
1、对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write.按照惯例,UNIX shel I使用文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准错误输出相结合。STDIN _FILENO、STDOUT_FILENO、 STDERR_FILENO这几个宏代替了0、1、2这几个魔数,0、1、2是linux系统默认的文件描述符。
2、文件描述符,这个数字在一个进程中表示一个特定含义,当我们open一个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回给应用程序一个数字作为文件描述符,这个数字就和我们内存中维护的这个动态文件的这些数据结构绑定上了,以后我们应用程序如果要操作这个动态文件,只需要用这个文件描述符区分。
3、文件描述符的作用域就是当前进程,出了这个进程文件描述符就没有意义了。open函数打开文件,打开成功返回一个文件描述符,打开失败,返回-1。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>#include <stdlib.h>
int main()
{int fd;char readbuf[128];int n_read=read(0,readbuf,5);//从标准输入读取5个字节到readbuf中int n_write=write(1,readbuf,strlen(readbuf));//将readbuf中的内容标准输出printf("done! \n");
}
总结
文件编程步骤:
1、打开或创建文件
2、读取文件或写入文件
3、关闭文件