Linux I/O文件open函数


open函数:

打开或创建一个文件

#include <fcntl.h>
int open(const char *pathname,int oflag, mode_t mode);
返回:若成功为文件描述符,若出错为-1


第一个参数pathname是要打开或创建的文件名称。

第二个参数oflag可用来说明此函数的多个选择项,用下列一个或多个常数进行或运算构成oflag参数(这些常数定义在<fcntl.h>头文件中):

O_RDONLY只读打开

O_WRONLY只写打开

O_RDWR写打开

在上面三个常量中必须指定一个·。

下列常量则是可以选择的:

O_APPEND每次写时都追加到文件尾部

O_CREAT若文件不存在,则创建它。使用此选项时,需要在第三个参数mode,用于指定该文件的访问权限位。

O_EXCL如果同时指定了O_CREAT,而文件已将存在,则会出错。用此可以测试一个文件是否存在,如果不存在,则创建此文件,这 使测试和创建两者成为一个原子操作。

O_TRUNC如果文件存在,而且为只写或读写成功打开,则将其长度截短为0.

O_NOCTTY如果pathname指的是终端设备,则不将该设备分配作为此进程的控制终端。

O_NONBLOCK如果pathname指的是一个FIFO。一个块特殊文件或一个字符串特殊文件,则此选项为文本的本次打开操作和后续的I/O操作设置非阻塞。


第三个参数mode对于open函数而言,仅当创建新文件时才使用第三个参数。(文件权限chmod 777 filename)




由于open函数返回的文件描述符一定是最小的未用描述符的数值,所以打开文件成功的描述符一般是从3开始。

(因为0、1、2被代替换成符号常数STDIN_FILEND、STDOUT_FILENO和STDERR_FILENO)


creat函数:

也可用creat创建一个新文件

#include <fcntl.h>
int  creat(const char *pathname,mode_t mode);

返回值:若成功则返回为只写打开的文件描述符,若出错则返回-1.

注意,此函数等效于:

open(pathname,O_WRONLY | O_CREAT | O_TRUNC ,mode);

creat的一个不足之处是它们以只写方式创建文件。在提供open的新版本之前,如果要创建一个临时文件,并要先写该文件,然后又读该文件,则必须先调用creat、close,然后再调用open。现在则可用下列方式调用open:

open(pathname,O_RDWR | O_CREAT | O_TRUNC, mode);

close函数:

也可用close函数关闭一个文件

#include <unistd.h>
int  close(int filedes);

返回值:若成功则返回0,若出错则返回-1.

关闭一个文件时还会释放该进程加在该文件上的记录锁。

当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用了这一功能而不显示地用close关闭打开文件。



简单例子:


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int fd = -1;
fd = open("hello01.c",O_CREAT|O_TRUNC|O_WRONLY,00600);

if(fd<0)
{
perror("open:");
exit(1);
}

else
printf("open file:hello01.c %d\n",fd);

if(close(fd)<0)
{
perror("close:");
exit(1);
}

else
printf("Close hello01.c\n");
exit(0);

}



运行结果:




猜你喜欢

转载自blog.csdn.net/qq_23948283/article/details/54619847
今日推荐