Linux文件系统相关操作

C文件I/O

在C语言中,默认会打开三个输入输出流,分别是stdin,stdout,stderr,不难发现,这三个流的类型都是FILE*,通过fopen得到的返回值为文件指针,指向打开的文件

#include <stdio.h>
#include <string.h>

int main(){

    FILE* fp = fopen("myfile","w");
    if(fp == NULL){
        perror("fopen error\n");
    }

    const char* msg = "Hello fp\n";
    int count = 5;
    while(count--){
        fwrite(msg,strlen(msg),1,fp);
    }
    fclose(fp);

    return 0;
}

系统文件I/O

操作文件,当然不止有上述的C接口或者其他语言的一些接口,我们还可以通过系统所暴露的接口来进行文件访问,例如

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

int main(){
    int fd = open("myfile",O_WRONLY|O_CREAT,0644);
    if(fd < 0 ){
        perror("open");
        return 1;
    }

    int count = 5;
    const char* msg = "hello fd\n";
    int len = strlen(msg);

    while (count--){
        write(fd,msg,len);
    }
    close(fd);
    return 0;
}

open函数:int open(const char* pathname , int flags);

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

pathname:要打开或创建的目标文件

flags:   打开文件时,可以传入多个参数选项,用一个或多个常量进行“或”运算,构成了flag

参数:

        O_RDONLY:只读打开

        O_WRONLY:只写打开

        O_RDWR    :读写打开

                          上面的三个变量必须指定一个且只能指定其中一个

扫描二维码关注公众号,回复: 1892408 查看本文章

        O_CREAT   :若文件不存在,则创建它。需要使用mode选项,来指明文件的访问权限

        O_APPEND :追加写文件

返回值:

        成功:返回的事新打开的文件描述符

        失败:返回-1;

mode_t:设置权限

open函数具体使用哪一个和应用场景有关,如果目标文件不存在,需要open创建,则第三个参数表示创建函数的默认权限,否则,使用两个参数的open。

文件描述符fd

了解了open函数之后,又引出了一个新的概念,文件描述符

猜你喜欢

转载自blog.csdn.net/qq_40425540/article/details/79768117