我的UNIX编程学习笔记——creat函数
creat函数
creat函数说明
creat函数用于创建 一个文件并以只写的方式打开。如果同名文件已经存在,那么文件长度将会被截短为0。 (注:文中同名文件指的是路径和文件都相同)
creat函数的原型:
int creat(const char* pathname, mode_t mode);
若函数执行成功返回打开文件的描述符(注意文件是以只写的方式打开),失败返回-1并设置errno的值。
creat函数的论述
creat函数使用不够灵活,确切的说很多情况不能满足我们的需求,首先因为这个函数在创建成功目标文件之后只能以只写的方式打开。这样多少会对一些程序员期望的操作带来一些不便,程序员可能会选择先关闭文件之后再用open函数打开。而且如果同名文件已经存在,那么文件长度将会被截短为0。但是我们不总是希望这样去做,可能原有的这个文件是有用处的。
所以通常选择open函数来替代creat函数,用open函数创建文件相对使用creat函数有以下的几个优势:
1、 可以指定不同的打开文件方式,有时我们希望创建文件后并直接以读写方式打开,那么我们可以在open函数中指定O_RDWR,当然如果仍然希望以只写的方式打开可以指定O_WRONLY。
2、 可以同时指定O_EXCL参数,这样在创建文件的同时就会进行检查,若同名文件存在那么open函数将返回出错。这样可以有效的避免误操作和原有文件被截短的问题,如果程序员不能保证与创建的文件同名的文件希望被丢弃的话,那么就应该指定O_EXCL这个参数。
3、 使用open函数还可以指定一些与同步输入与输出相关的参数,这样可以适应更多的需求,比如我们希望之后对文件写的操作等待实际I/O的结束,那么就可以指定O_SYNC参数。
我们可以通过上面几点看出使用open函数创建文件相对于使用creat函数的优势,因此相对open函数来说creat函数只需要适当的了解即可。实际编程中creat函数的使用已经是非常的罕见了,现在往往是在用open函数来创建一个文件。
使用open函数实现类似creat函数功能
绝大多数的情况下使用open函数实现类似creat函数的功能是一个非常好的方式,下面给出一种利用open函数创建文件的函数调用方式:
fd = open(pathname, O_RDWR | O_CREAT | O_EXCL, mode);
使用这种调用方式打开文件的形式是读和写,检测到存在的同名文件会返回错误,否则会直接创建文件并以读写的方式打开,文件的访问权限由mode参数指定。这里没有指定O_TRUNC参数,因为此时只有同名文件不存在的时候才会创建这个文件,新创建的文件里面不会有其他的内容。下面的调用方式也非常的常见,这种方式可以理解为creat的读写打开文件的版本:
fd = open(pathname, O_RDWR | O_CREAT | O_TRUNC, mode);