当前位置: 代码网 > 服务器>服务器>Linux > Linux文件操作之打开及创建过程

Linux文件操作之打开及创建过程

2026年08月25日 Linux 我要评论
打开(open)使用open函数需要包含以下三个头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcnt

打开(open)

使用open函数需要包含以下三个头文件:

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

open的函数定义格式

int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);

函数定义的参数解读

1.pathname:指向文件的路径

指定文件格式:./文件夹名字/指定文件名字

当前文件格式:./当前文件名字

2.flags:文件权限(分为两种情况)

第一种:(只能选择并执行其中一个)

1、o_rdonly 只读打开

2、o_wronly 只写打开

3、o_rdwr 可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作。以上这三个常数中应当只指定一 个。

第二种:(可以选择多种同时进行)

注:在执行第二种时,其格式是与第一种并在一起,两者中间需要加一个 '|'

1.o_creat:若文件不存在则创建它,使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。

结构如下:(最后一部分代码可为此做展现)

fd = open("./file1",o_rdwr|o_creat,0600);//fd为open的文件描述符,如果没有该文件,则创建一个新的文件并打开

2.o_excl:如果同时指定了o_creat,而文件已经存在,则出错(返回-1)。

结构如下:

fd=open("./file1",o_rdwr|o_creat|o_excl,0600);//fd为open返回的文件描述符,此时若已经存在file1,open返回-1

代码示例:

int main()
{
    int fd;
    fd = open("./file1",0 rdwrio_creatio_excl,0600);
    if(fd == -1)
    {
        printf("file cunzai\n");
    }
    return 0;
}

//文件已经存在则会出错 返回值为-1 再针对-1做出验证

3.o_append:每次写时都加到文件的尾端。

结构如下:

fd=open("./file1",o_rdwr|o_append);//此时可将原file1文件里的信息保留后再从尾部写入

代码示例:

int main()、
{
    int fd;
    char *buf = "hello word";

    fd = open(" ./file1",0_rdwr|o_append);
    printf("open susceess : fd = %d\n",fd);
    int n_write = write(fd,buf,strlen(buf));
    if(n_write != -1)
    {
        printf("write %d byte to fileln",n_write);
    }
    close(fd);
    return 0;
}

//原先在文件里写入123456 执行上述代码后会在原先里面的123456后输出hello word

4.o_trunc属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。

结构如下:

fd=open("./file1",o_rdwr|o_trunc);//此时可将原file1文件里的信息先删除后写入
int main()、
{
    int fd;
    char *buf = "test";

    fd = open(" ./file1",0_rdwr|o_trunc);
    printf("open susceess : fd = %d\n",fd);
    int n_write = write(fd,buf,strlen(buf));
    if(n_write != -1)
    {
        printf("write %d byte to fileln",n_write);
    }
    close(fd);
    return 0;
}

//原先在文件里写入hello word,执行上述代码后文件会将原先里面的hello word替换成test

3.mode

mode是文件的创建模式,其执行功能有5种,分别是:

  • 可执行:0100
  • 可写:0200
  • 可读:0400
  • 可读、写:0600
  • 可读、可写、可执行:0700

读的符号是r,数值为4;写的符号是w,数值为2;执行的符号是x,数值为1。其中共有4位数,而mode的创建模式执行的功能取决于第2位的数值(几种数值本身的数或者和)。

对0600解析即:文件的所有者(用户)对文件file1的权限。

注:mode一定是在flags中使用了o creat标志,mode记录待创建的文件的访问权限。

文件描述符

执行一个程序时可能会打开很多文件,而对多个文件的操作需要进行区别,我们需要指定某个文件进行指定操作,这个时候就需要一个区分标志来辨别,即文件描述符。

当一个文件被打开时,系统会产生一个结构体来储存文件中的各种信息,此时文件描述符指向这些信息。同时open函数的返回值就是一个文件描述符,其返回值是一个较小的非负整数

代码展示

文件存在:

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

int main()
{
	int fd;//定义一个文件描述符
	
	fd = open("./file1",o_rdwr);//open函数的返回值给文件描述符
	printf("fd = %d\n",fd);//输出文件描述符的值
	return 0;
}

文件不存在:

创建(creat)

与open函数一样需包含以下三个头文件

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

creat的函数定义格式

int creat(const char *pathname,mode_t mode);

示例:

fd = creat("/home/clc/file1",s irwxu);//指定路径创建文件 并赋予权限
fd = creat("./file1",s irwxu);//当前路径创建文件 并赋予权限

与open函数一样,返回值也是文字描述符。返回值也是一个较小的非负整数。

函数定义的参数解读

1.pathname:指向文件的路径

2.mode

mode是文件的创建模式,这里与open函数的mode有区别,这里的创建模式为系统自带。

  • 可执行:s_ixusr
  • 可写:s_iwusrl
  • 可读:s_irusr
  • 可读、可写、可执行:s_irwxu

代码展示

结合open函数:

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

int main()
{
	int fd;
	
	fd = open("./file1",o_rdwr);//此时文件已经不存在
	
	if(fd == -1)//文件不存在输出小于零的负数
	{
		printf("open file1 failed\n");//提示文件打开失败
		fd = open("./file1",o_rdwr|o_creat,0600);//创建一个可读可写可执行的文件
		if(fd > 0)//输出非负整数
		{
			printf("creat file1 success\n");//提示创建成功并打开
		}
	}
	return 0;
}

可见删除file1之后用该函数可以再次创建并打开。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com