本文介绍: 5、根据1和4,操作系统运行中,可能打开很多个文件操作系统要不要管理打开文件呢?它定义了新创建文件权限。2、内容数据属性也是数据——存储文件,必须既存储内容,又存放数据。4、一个进程可以打开多个文件吗?多个进程可以打开多个文件吗?3、我们访问一个文件的时候,都是要把这个文件打开。表示文件所有者具有读写权限其他用户只有读权限。6、文件按照是否被打开,分成:被打开的文件(这是一个字符串指定打开创建的。它可以是文件的相对路径或绝对路径。),没有被打开的文件(打开文件的方式行为

目录

一、基本概念

二、研究进程和被打开文件的关系

(一)w方式

(二)a方式

三、认识系统接口,操作文件

(一)认识文件描述符

(二)举例

(三)理解文件


一、基本概念

1、所有对文件的操作

2、内容是数据属性也是数据——存储文件,必须既存储内容,又存放数据

3、我们访问一个文件的时候,都是要把这个文件先打开

4、一个进程可以打开多个文件吗?多个进程可以打开多个文件吗?

  • 加载内存,被打开的文件,可能会存在多个
  • 进程:打开的文件 = 1 :n(1)

5、根据1和4,操作系统运行中,可能打开很多个文件,操作系统要不要管理打开的文件呢???需要,如何管理???先描述组织

 

6、文件按照是否被打开,分成:被打开的文件(内存),没有被打开的文件(在磁盘中

二、研究进程和被打开文件的关系

(一)w方式

  • w:以写的方式打开,如果文件不存在就创建它 
#include<stdio.h>    
int main()    
{    
    FILE *fp=fopen("log.txt","w");    
    if(NULL == fp)    
    {    
        perror("fopen");    
        return 1;    
    }    
    
    const char*msg = "hello worldn";    
    int cnt = 10;    
    while(cnt)    
    {    
        fputs(msg, fp);    
        cnt--;    
    }    
    
    fclose(fp);    
    return 0;                                                                                                                                    
}

(二)a方式

#include<stdio.h>    
int main()    
{    
    FILE *fp=fopen("log.txt","a");    
    if(NULL == fp)    
    {    
        perror("fopen");    
        return 1;    
    }    
    
    const char *msg = "message.txtn";    
    fputs(msg,fp);                                                                                                                               
    return 0;    
} 

 

 

三、认识系统接口操作文件

man 2 open
NAME
       open, creat - open and possibly create a file or device

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

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

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

(一)认识文件描述

#include<stdio.h>    
    
#define print1  1         //0001    
#define print2 (1<<1)     //0010    
#define print3 (1<<2)     //0100    
#define print4 (1<<3)     //1000    
    
void print(int flags)    
{    
    if(flags &amp; print1) printf("hello 1n"); //检查 flags 中是否包含 print1 对应的标志位
    if(flags &amp; print2) printf("hello 2n");    
    if(flags &amp; print3) printf("hello 3n");    
    if(flags &amp; print4) printf("hello 4n");    
    else printf("Nonen");    
}    
int main()    
{    
    print(print1); //输出了 hello 1,因为 print1 代表的标志位被设置 
    printf("------------n");    
    print(print1|print2);//输出了 hello 1 和 hello 2,因为 print1 和 print2 的标志位都被设置 
    printf("------------n");    
    print(print1|print2 | print3); 
    printf("------------n");    
    print(print3|print4);    
    printf("------------n");                                                                                                                    
    print(print4);    
    
    return 0;    
}

 

(二)举例

#include <stdio.h>    
#include <unistd.h>//close的头文件    
#include <string.h>//strlen头文件    
//下面三个是open头文件    
#include <sys/types.h>    
#include <sys/stat.h>    
#include <fcntl.h>    
    
int main()    
{    
    umask(0);//更改掩码    
    int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC, 0666);    
    if(fd < 0)    
    {    
        perror("open");    
        return 1;    
    }    
    
    const char *msg="aaaaa";    
    write(fd,msg,strlen(msg));    
    close(fd);    
    return 0;    
} 

 

 

(三)理解文件

 

 

原文地址:https://blog.csdn.net/m0_63783532/article/details/134561228

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_7541.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注