Skip to content

挂载

在Linux中,挂载是将文件系统连接到文件系统树中的过程,使得文件系统中的文件和目录可以在特定的挂载点上访问。通过挂载,可以将各种存储设备(如硬盘分区、光盘、USB驱动器等)与文件系统关联起来。

一般的Linux挂载流程:

  1. 确定要挂载的设备:首先,需要确定要挂载的设备,可以使用命令如lsblkfdisk -lblkid等来查看系统中的设备列表。
  2. 创建挂载点:在挂载设备之前,需要创建一个目录作为挂载点。可以选择任意合适的目录作为挂载点,通常在/mnt/media目录下创建。使用mkdir命令可以创建目录,例如:
shell
mkdir /mnt/mydrive
  1. 执行挂载命令:使用mount命令将设备挂载到指定的挂载点上,语法如下:
shell
mount <> <挂载>

其中,设备是要挂载的文件系统的设备名称,可以是设备文件(如/dev/sda1)或UUID。挂载点是文件系统要连接到的目录路径。 例如,将/dev/sdb1设备挂载到/mnt/mydrive目录,可以使用以下命令:

shell
mount /dev/sdb1 /mnt/mydrive
  1. 访问挂载的文件系统:一旦挂载成功,您可以通过挂载点路径访问文件系统中的文件和目录。例如,通过/mnt/mydrive路径可以访问挂载的文件系统。
  2. 卸载挂载的文件系统:当您不再需要访问挂载的文件系统时,可以使用umount命令将其卸载,语法如下:
shell
umount <挂载>

例如,卸载/mnt/mydrive目录下的文件系统,可以使用以下命令:

shell
umount /mnt/mydrive

文件

  1. 带缓存文件 文件类型指针
  2. 非缓存文件文件描述符
  3. 文件类型->就是结构体

缓存文件操作

fopen打开文件

查看文件手册(fopen为例)

c
#include<stdio.h>

FILE *fopen(const char *path, const char *mode)
FILE *fdopen(int fildes, const char *mode)
FILE *freopen(const char *path, const char *mode,FILE *stream)

头文件

函数的参数

path文件名称+文件路径 mode 模式 模式r :只读 r:+读写 w :只写,且原文件被清空 w+:写,且如果文件不存在则创建文件,文件存在则文件清空 a:只能写文件存在,文件末尾写入,不存在创建文件再写 a+:可读可写

读文件

  1. fgetc
  2. fgets
  3. fread

写文件

fputc fputs fwrite

fclose关闭文件

feof

判断文件指针所指向的文件是否已经达到了文件末尾

c
if(feof(fpr)){
……
}

代码示例1:fgetc,fputc

c
#include<stdio.h>
#include<stdlib.h>
int main(){
        FILE *fpr,*fpw;
        int ch;
        if((fpr=fopen("hello.c","r"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        if((fpw=fopen("hellocopy1.c","w"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

/*
        while((ch=fgetc(fpr))!=EOF){

                fputc(ch, fpw);
        }
        
*/
         while (1) {
           ch = fgetc(fpr);
           if (ch < 0){
           break;
           }

        fputc(ch, fpw);
    }
        fputc(ch,fpw);
        fclose(fpr);
        fclose(fpw);

        return 0;
}

代码示例2:fgets,fputs

c
#include<stdio.h>
#include<stdlib.h>
#define B 10
int main(){
        FILE *fpr,*fpw;
        char b[B];

        if((fpr=fopen("hello.c","r"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        if((fpw=fopen("hellocopy2.c","w"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }
/*
        while(1){
                if(fgets(b,B,fpr)==NULL){
        break;
        }
        fputs(b,fpw);

        }
        fputs(b,fpw);
*/
        while((fgets(b,B,fpr))!=NULL){
        fputs(b,fpw);
        }
        fclose(fpr);
        fclose(fpw);
        
        return 0;
             
}

代码示例3:fread,fwrite

c
#include<stdio.h>
#include<stdlib.h>
#define B 10
int main(){
        FILE *fpr,*fpw;
        char ch;
        int size;
        char b[B];
        if((fpr=fopen("hello.c","r"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        if((fpw=fopen("hellocopy3.c","w"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        while(1){
        if((size = fread(b,1,B,fpr))<=0)
		//用size来存大小
                break;
        //1是每个数据项的大小,而B是要读取的数据项的数量
        fwrite(b,1,size,fpw);

        }

        fclose(fpr);
        fclose(fpw);

        return 0;

}

fread(b,1,B,fpr)

  1. 1:表示每次读取的数据项的大小(以字节为单位)。在这种情况下,每次读取的数据项大小为 1 字节。这意味着 fread 函数每次读取的数据项都是一个字节大小。
  2. B:表示要读取的数据项的数量。它是一个整数值,用于指定要从文件中读取多少个数据项。具体的值取决于你的需求和文件中的数据结构。在这个代码片段中,你需要根据实际情况将正确的值赋给 B

这里的 1B 都是整数值,表示不同的含义。1 是每个数据项的大小,而 B 是要读取的数据项的数量。你需要根据你的需求和数据的结构来确定正确的值。

fread(b, 1, B, fpr):

b:指向要存储读取数据的缓冲区的指针。
1:每个数据项的大小(以字节为单位),在这种情况下是 1 字节。
B:要读取的数据项的数量。
fpr:指向要读取数据的文件的指针。
这个函数调用的意思是从文件中读取 B 个大小为 1 字节的数据项,并将它们存储到 b 所指向的缓冲区中。

fread(b, B, 1, fpr):

b:指向要存储读取数据的缓冲区的指针。
B:要读取的数据项的数量。
1:每个数据项的大小(以字节为单位),在这种情况下是 1 字节。
fpr:指向要读取数据的文件的指针。
这个函数调用的意思是从文件中读取 1 个大小为 B 字节的数据项,并将它们存储到 b 所指向的缓冲区中。

代码示例4:fscanf,fprintf

c
#include<stdio.h>
#include<stdlib.h>
int main(){
        FILE *fpr,*fpw;
        char ch;
        if((fpr=fopen("hello.c","r"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        if((fpw=fopen("hellocopy4.c","w"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }
        /*
        while(1){
        if(fscanf(fpr,"%c",&ch)==EOF)
                break;
        fprintf(fpw,"%c",ch);
        }*/

        while(fscanf(fpr,"%c",&ch)!=EOF){
                fprintf(fpw,"%c",ch);
        }


        fclose(fpr);
        fclose(fpw);

        return 0;

}

主函数参数

int argc ,char * argv[ ]

c
#include<stdio.h>
#include<stdlib.h>
int main(int argc ,char * argv[]){
        FILE *fpr,*fpw;
        char ch;
        if(a)
        if((fpr=fopen("argv[1]","r"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }

        if((fpw=fopen("argv[2]","w"))==NULL)
        {
                perror("open file error:");
                exit(0);
        }
        while(fscanf(fpr,"%c",&ch)!=EOF){
                fprintf(fpw,"%c",ch);
        }


        fclose(fpr);
        fclose(fpw);

        return 0;

}

参数说明:

argc 是用来记录传递给程序的参数的数量 argv 是一个字符串数组,用于存储命令行参数。argv[0] 存储的是程序的名称,而 argv[1]argv[2] 等存储的是传递给程序的参数。、

非缓冲文件的文件操作

open

1.作用

打开和创建文件。

2.头文件

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

3.定义函数

c
  int open( const char * pathname, int flags);

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

4.参数说明

O_RDONLY 只读模式 O_WRONLY 只写模式 O_RDWR 读写模式 打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的: O_APPEND 每次写操作都写入文件的末尾 O_CREAT 如果指定文件不存在,则创建这个文件 O_EXCL 如果要创建的文件已存在,则返回 -1,并且修改 errno 的值 O_TRUNC 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0) O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。 O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O

close

read/write

c
#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

fd为文件描述符;buf表示读出数据缓冲区地址;count表示读出的字节数

lseek

c
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int filedes, off_t offset, int whence) ;

第一个参数是文件描述符; 第二个参数是偏移量,int型的数,正数是向后偏移,负数向前偏移; 第三个参数是有三个选项: 1.SEEK_SET:将文件指针偏移到传入字节数处(文件头开始偏移) 2.SEEK_CUR:将文件指针偏移到当前位置加上传入字节数处;((当前位置开始偏移) 3.SEEK_END:将文件指针偏移到文件末尾加上传入字节数处(作为拓展作用,必须再执行一次写操作)

fflush

1.作用

更新缓存区。

2.头文件、函数定义

c
#include<stdio.h>

int fflush(FILE *stream);

3.函数说明

调用fflush()会将缓冲区中的内容写到stream所指的文件中去.若stream为NULL,则会将所有打开的文件进行数据更新。 fflush(stdin):刷新缓冲区,将缓冲区内的数据清空并丢弃。 fflush(stdout):刷新缓冲区,将缓冲区内的数据输出到设备

dup2

1 .头文件和函数原型

c
#include <unistd.h>
int dup2(int oldfd, int newfd);

2. 参数简介

  • oldfd:原来的文件描述符
  • newfd:复制成的新的文件描述符

3.函数返回值

  • 成功:将oldfd复制给newfd, 两个文件描述符指向同一个文件
  • 失败:返回-1, 设置errno值

当调用dup2(int oldfd,int newfd)之后,若newfd原来已经打开了一个文件,则先关闭这个文件,然后newfd和oldfd指向了相同的文件;若newfd原来没有打开一个文件,则newfd直接指向和oldfd指向相同的文件

Released under the MIT License.