Linux中怎么挂载U盘?
要通过命令创建文件,操作文件就相当于操作硬件,因此所有设备都看成是一种特殊的文件。
移动存储都是挂载在/mnt目录下
/Opt是安装目录
三个直接对操作系统核心连接的P是系统调用,相当于是使用了系统自带的函数,比如说cd这个指令
函数库连接了操作系统核心,这个意思是函数库中的部分函数只是对操作系统自带函数的一种包装,其实本质上是系统自带函数
Linux系统和Windows系统下的printf调用的系统函数不同
内核编程是直接调用系统函数,效率更快,不需要去通过函数库比对,然后再从函数库角度去调用系统函数
调用系统函数的目的:服务器开发
函数库的优点:把开发者和使用者的平台区分开,开发是一个平台,使用是一个平台,这样就可以实现跨平台使用 |
系统函数:
Open
int open(const char *path, int flags);
path :文件的名称,可以包含(绝对和相对)路径 flags:文件打开模式
打开成功,返回文件描述符; 打开失败,返回-1 ---------------------------以下是open三参数--------------------------------
int open(const char *path, int flags,mode_t mode);
path :文件的名称,可以包含(绝对和相对)路径 flags:文件打开模式 mode: 用来规定对该文件的所有者,文件的用户组及系统中其他用户的访问权限,则文件权限为:mode&(~umask)
打开成功,返回文件描述符; 打开失败,返回-1 --------------------------打开模式主要有以下几种----------------------------
所有这些标志值的符号名称可以通过#include<fcntl.h0>访问 |
Read
int read(int fd, void *buf, size_t nbytes); 参数
返回值 如果出现错误,返回-1 返回从该文件复制到规定的缓冲区中的字节数,文件结束,返回0否则 这个函数会把读到的数据存到第二个参数中,Read函数的第二个参数的意思是文件的类型,比如:text,ppt,jpg这种的,所以要用void*类型的任意类型 第三个参数则是拷贝数据的字节个数 |
Write 函数原型:int write(int fd,void *buf,size_t nbytes); 函数参数:
返回值 如果出现错误,返回-1 如果写入成功,则返回写入到文件中的字节个数 这边要注意,因为read和write的第二个参数都是一个指针类型的参数,所以在函数外部用同一个变量做接口,从read函数读取数据到一个变量里面,然后再用这个已经有数据的变量,把这个数据通过write写入到对应的文件中 |
Close
函数原型:int close(int fd); 函数参数:
返回值 如果出现错误,返回-1 调用成功返回0 |
查看系统函数的头文件的方法
创建一个文件的注意点:
Linux有系统保护,外部通过open连接创建一个777的文件会被umask的权限掩码给阻拦 Umask指令返回022 Umask相当于是一个系统保护 因此我们要在open之前要关闭权限掩码,把umask设置为0 |
关于用只读模式打开文件,说明文件已经存在,因此不需要第三个参数
Read函数的第二个参数的意思是文件的类型,比如:text,ppt,jpg这种的,所以要用void*类型的任意类型
注意点:
1.Linux中的变量必须要初始化,因此在VS2019中编写代码当我们定义一个变量时必须对其进行初始化,如下图
2.路径要加/根目录
这边打断点的原因是因为跨平台运行,代码在Windows,运行在linux,是GDB运行,必须要打断点运行
并且有cout就要加endl换行,必须要加,要不然程序不知道什么时候代码结束
代码