-
2020-01-31 11:08:53
直接入正题吧!
相信了解过JVM的人都听说过,在JVM中的一个非堆内存在java8之前叫做永久代,在java8后,就更名为元空间了,当然这两个概念都是基于HotSpot虚拟机,其他虚拟机没有这些概念
为了理清这些变化,先说一下方法区和永久代的区别
方法区只是一规范,在不同的虚拟机中的实现是不一样的,例如永久代和元空间。
用于存放被已经被JVM加载的的类信息,常量,静态变量,方法数据,构造函数和普通方法等java堆物理上有新生代和老年代,逻辑上分为新生代+老年代+永久代
解析:
永久代其实只是方法区的一个存储实现,逻辑上划分为堆的一部分,为的是方法区也可以用堆内存的GC垃圾回收机制,而不用重新针对方法区做GC操作,直接使用堆内存的GC就可以了在java8后,使用元空间替代了永久代,且元空间的内存不在JVM堆中,而是在本地内存中,所以java8元空间,基本不存在OOM内存溢出;
但是java7的永久代位于JVM内存中,存在OOM错误;
且在java8中,常量池是位于元空间中,string的实例化放在堆内存中更多相关内容 -
Linux中判断一个目录是否存在,如果不存在就创建这个目录
2020-11-12 11:04:281、判断文件是否存在,并判断文件是否可写/目录是否存在 Linux下: #include<unistd.h> int access(const char* pathname, int mode); 参数介绍: 返回值:成功0,失败-1 pathname 是文件的路径名+...在操作文件目录时我们常常会考虑如下的功能:
1、判断文件是否存在,并判断文件是否可写/目录是否存在
Linux下:
#include<unistd.h>
int access(const char* pathname, int mode);
参数介绍:
返回值:成功0,失败-1
pathname 是文件的路径名+文件名
mode:指定access的作用,取值如下:
F_OK 值为0,判断文件是否存在 X_OK 值为1,判断对文件是可执行权限 W_OK 值为2,判断对文件是否有写权限 R_OK 值为4,判断对文件是否有读权限 注:后三种可以使用或“|”的方式,一起使用,如W_OK|R_OK
C++(标准C++中):
头文件:<io.h>
函数原型:int _access(const char *pathname, int mode);
参数:pathname 为文件路径或目录路径 mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)
返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1.
备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。
mode的值和含义如下所示:
00——只检查文件是否存在
02——写权限
04——读权限
06——读写权限
注意:用 int access(const char *pathname, int mode); 判断有没有此文件或目录 --它区别不出这是文件还是目录
用 int stat(const char *file_name, struct stat *buf); 判断该文件或目录是否否存在 ;得到st_mode,然后判断是不是目录文件。
stat()系统调用看是否成功,不成功就不存在,成功判断返回的st_mode是否是一个文件夹。2、判断目录是否存在
可以使用opendir来判断,这是比较简单的办法。
#include <sys/types.h>
#include <dirent.h>DIR *opendir(const char *name);
3、Linux下mkdir函数,创建目录
头文件库:
#include <sys/stat.h>
#include <sys/types.h>
函数原型:
int mkdir(const char *pathname, mode_t mode);
函数说明:
mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。
返回值:
若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。
mode的值如下表:
S_IRWXU 00700权限,代表该文件所有者拥有读,写和执行操作的权限 S_IRUSR(S_IREAD) 00400权限,代表该文件所有者拥有可读的权限 S_IWUSR(S_IWRITE) 00200权限,代表该文件所有者拥有可写的权限 S_IXUSR(S_IEXEC) 00100权限,代表该文件所有者拥有执行的权限 S_IRWXG 00070权限,代表该文件用户组拥有读,写和执行操作的权限 S_IRGRP 00040权限,代表该文件用户组拥有可读的权限 S_IWGRP 00020权限,代表该文件用户组拥有可写的权限 S_IXGRP 00010权限,代表该文件用户组拥有执行的权限 S_IRWXO 00007权限,代表其他用户拥有读,写和执行操作的权限 S_IROTH 00004权限,代表其他用户拥有可读的权限 S_IWOTH 00002权限,代表其他用户拥有可写的权限 S_IXOTH 00001权限,代表其他用户拥有执行的权限 int32_t OpendirAndMkdir(const char * pathname) { int ret = 0; DIR * mydir = NULL; if ((mydir = opendir(pathname)) == NULL) { ret = mkdir(pathname, 0755); if (ret != 0) return -1; printf("%s created sucess!/n", pathname); } else { printf("%s exist!/n", pathname); } return ret; }
-
C语言判断文件或文件夹是否存在
2022-02-09 10:22:50汇总网上搜集的资料,总结了下述几种方法用于判断文件或者文件夹是否存在,注意每个函数的头文件引用。C语言判断文件或文件夹是否存在
汇总网上搜集的资料,总结了下述几种方法用于判断文件或者文件夹是否存在,注意每个函数的头文件引用。
一、使用access
- 函数定义
#include <unistd.h> int access(const char * pathname, int mode);
- 函数说明
可用于判断文件或者目录是否存在,
access()
会检查是否可以读/写某一已存在的文件,access()
只作权限的核查, 并不理会文件形态或文件内容,因此,如果一目录表示为"可写入",表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理pathname
为文件或文件夹的路径,当前目录直接使用文件或文件夹名;mode
表示检查模式,共4种模式:R_OK, 4
只判断是否有读权限,对应宏定义里面的00 只存在
W_OK, 2
只判断是否有写权限,对应宏定义里面的02 写权限
X_OK, 1
判断是否有执行权限,对应宏定义里面的04 读权限
F_OK, 0
只判断是否存在,对应宏定义里面的05 读和写权限
- 返回值
如果指定的存取方式有效,则函数返回
0
,否则函数返回-1
- 使用示例
#include <unistd.h> int file_exist(const char *path) { return (access(path, F_OK) == 0); }
二、使用stat
- 函数定义
#include <sys/stat.h> int stat(const char *file_name, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf);
- 函数说明
可用于判断文件或者目录是否存在,通过文件名
filename
获取文件信息,并保存在buffer
所指的结构体stat
中,根据stat
中的st_mode
,判断是不是目录文件。相关的还有lstat
以及fstat
;stat
与fstat
完全相同,但fstat
传入的是文件描述符;stat
与lstat
差别就在于l-link
,stat
会越过链接文件读取原文件,后者则读取链接文件- 返回值
执行成功则返回
0
,失败返回-1
,错误代码存于errno
(需要include <errno.h>
)- 使用示例
#include <sys/stat.h> int file_exist(const char *path) { struct stat buffer; return (stat(path, &buffer)==0); }
- 扩展
/* stat结构体参数说明 */ struct stat { dev_t st_dev; //device 文件的设备编号 ino_t st_ino; //inode 文件的i-node mode_t st_mode; //protection 文件的类型和存取的权限 nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1. uid_t st_uid; //user ID of owner 文件所有者的用户识别码 gid_t st_gid; //group ID of owner 文件所有者的组识别码 dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号 off_t st_size; //total size, in bytes 文件大小, 以字节计算 unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小. unsigned long st_blocks; //number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节. time_t st_atime; //time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、utime、read、write 与tructate 时改变. time_t st_mtime; //time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、utime 和write 时才会改变 time_t st_ctime; //time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、权限被更改时更新 }; /* 描述的st_mode 则定义了下列数种情况,可以使用“&”来读取文件的属性: 1、S_IFMT 0170000 文件类型的位遮罩 2、S_IFSOCK 0140000 scoket 3、S_IFLNK 0120000 符号连接 4、S_IFREG 0100000 一般文件 5、S_IFBLK 0060000 区块装置 6、S_IFDIR 0040000 目录 7、S_IFCHR 0020000 字符装置 8、S_IFIFO 0010000 先进先出 9、S_ISUID 04000 文件的 (set user-id on execution)位 10、S_ISGID 02000 文件的 (set group-id on execution)位 11、S_ISVTX 01000 文件的sticky 位 12、S_IRUSR (S_IREAD) 00400 文件所有者具可读取权限 13、S_IWUSR (S_IWRITE)00200 文件所有者具可写入权限 14、S_IXUSR (S_IEXEC) 00100 文件所有者具可执行权限 15、S_IRGRP 00040 用户组具可读取权限 16、S_IWGRP 00020 用户组具可写入权限 17、S_IXGRP 00010 用户组具可执行权限 18、S_IROTH 00004 其他用户具可读取权限 19、S_IWOTH 00002 其他用户具可写入权限 20、S_IXOTH 00001 其他用户具可执行权限上述的文件类型在 POSIX 中定义了检查这些类型的宏定义 21、S_ISLNK (st_mode) 判断是否为符号连接 22、S_ISREG (st_mode) 是否为一般文件 23、S_ISDIR (st_mode) 是否为目录 24、S_ISCHR (st_mode) 是否为字符装置文件 25、S_ISBLK (s3e) 是否为先进先出 26、S_ISSOCK (st_mode) 是否为socket 若一目录具有sticky 位 (S_ISVTX), 则表示在此目录下的文件只能被该文件所有者、此目录所有者或root 来删除或改名。 错误代码: 1、ENOENT 参数file_name 指定的文件不存在 2、ENOTDIR 路径中的目录存在但却非真正的目录 3、ELOOP 欲打开的文件有过多符号连接问题, 上限为16 符号连接 4、EFAULT 参数buf 为无效指针, 指向无法存在的内存空间 5、EACCESS 存取文件时被拒绝 6、ENOMEM 核心内存不足 7、ENAMETOOLONG 参数file_name 的路径名称太长 */
三、使用opendir
- 函数定义
#include <dirent.h> DIR * opendir(const char * name);
- 函数说明
用于判断目录是否存在,
opendir()
用来打开参数name
指定的目录, 并返回DIR*
形态的目录流, 和open()
类似, 接下来对目录的读取和搜索都要使用此返回值。opendir
可用于判断目录是否存在,但是调用以后需要使用closedir()
关闭目录流,否则会有内存泄漏- 返回值
成功则返回
DIR*
型态的目录流, 打开失败则返回NULL
,错误代码存于errno
(需要include <errno.h>
)- 使用示例
#include <dirent.h> int file_exist(const char *path) { if ((dp = opendir(path)) == NULL) { return 0; } else { closedir(dp); return 1; } }
- 扩展
/* 错误代码: 1、EACCESS 权限不足。 2、EMFILE 已达到进程可同时打开的文件数上限。 3、ENFILE 已达到系统可同时打开的文件数上限。 4、ENOTDIR 参数name 非真正的目录。 5、ENOENT 参数name 指定的目录不存在, 或是参数name 为一空字符串。 6、ENOMEM 核心内存不足。 */
参考链接
-
观察者模式和发布订阅模式区别
2020-04-27 23:00:44观察者模式和发布订阅模式区别: 一、从表面上看: 观察者模式里,只有两个角色 —— 观察者 + 被观察者 而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker 二...观察者模式和发布订阅模式区别:
一、从表面上看:
观察者模式里,只有两个角色 —— 观察者 + 被观察者
而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker
二、往更深层次讲:
观察者和被观察者,是松耦合的关系
发布者和订阅者,则完全不存在耦合三、从使用层面上讲:
观察者模式,多用于单个应用内部
发布订阅模式,则更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件 -
token和jwt存在什么区别
2018-12-14 09:35:38token和jwt存在什么区别 结论: 最直观的:token需要查库验证token 是否有效,而JWT不用查库或者少查库,直接在服务端进行校验,并且不用查库。因为用户的信息及加密信息在第二部分payload和第三部分签证中已经生成... -
生产许可证和营业执照之间存在区别
2019-09-21 08:30:28生产许可证和营业执照之间存在区别。区别如下: 1、证件申办单位不一样。营业执照由工商行政管理部门颁发和管理。生产许可证由国家质量技术监督局颁发和管理。 2、证件适用范围不一样。营业执照是颁发给工商企业或... -
怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别
2014-08-24 16:45:00这次我将讨论W3C的标准DOM事件模型和IE独立门户的DOM事件模型到底有多少区别,首先我们可以回想一下目前大多数Js程序员习惯如何绑定事件到DOM元素上,最常见的就是obj.onclick=handler这种方式(更恶劣的是在Html代码... -
RDD和DataFrame和DataSet三者间的区别
2018-11-23 16:25:24他们和RDD有什么区别呢?首先从版本的产生上来看: RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6) 如果同样的数据都给到这三个数据结构,他们分别计算之后,... -
System.IO.File.Exists 和FileInfo类Exists 属性的区别?为何前者返回文件存在,后者返回不存在
2012-08-15 21:59:50我本地有一个文件是 msi文件, 文件确实是存在。 路径 在 运行 中可以打开 ! 但是 FileInfo 的 Exists属性返回该文件不存在。 但是System.IO.File.Exists 返回存在! 我看了 他们反编译后的大概的代码, 他们... -
mysql判断是否存在该如何写?
2020-08-18 17:25:09但是其执行时间却不相同,此处使用的表中只有几千条数据要是数据了更大差别应该会更明显的 特殊的判断是否存在(不能使用limit1) 比如有个需求excel导出功能表中的数据很多,一次性导出过多由于性能问题可能会很慢... -
【mysql】drop、truncate和delete的区别
2022-03-03 10:52:55对比 TRUNCATE TABLE 和 DELETE FROM3. DDL 和 DML 的说明 1. drop:删除数据库 drop语句将表所占用的空间全释放掉。 drop > truncate > delete 方式1:如果要删除的数据库存在,则删除成功。如果不存在,... -
利用python检查文件或文件夹是否存在
2018-11-28 09:33:19那么判断文件和文件夹是否存在常用的有哪些函数了?这里逐一给您娓娓道来。 0. 准备 首先我们建立如下所示的层级结构,我们在/home/os_test之下,建立起一个文件夹dir还有两个txt文件file.txt,link.txt。 因为我们... -
深度学习面试题:原始GAN 在实际应用中存在哪些问题?
2021-01-11 12:28:34生成式对抗网络的基本原理 ...本节将从初始版本的GAN出发,通过学习GAN的原理,对比GAN与其他几种生成式模型的异同,以及分析原始GAN中存在的问题,以获得对GAN的深度理解。 知识点 生成模型、自编码器(AutoEncod -
HTTPS、SSL、TLS三者之间的联系和区别
2018-08-17 17:52:545)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。 6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和... -
drop,truncate,delete 三者的区别
2019-02-01 16:58:46drop:删除内容和定义,释放空间。(表结构和数据一同删除) 【drop语句将删除表的结构,被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。】... -
生产者消费者模式与订阅发布者模式的区别
2015-10-12 11:14:45订阅发布者模式本质上也是一种...订阅发布者模式有时也称为观察者模式,订阅发布者(观察这和被观察者)存在着主动被动的关系,而生产者消费者比较中性吧。 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者... -
var,let,const三者的特点和区别
2021-01-26 11:45:53var,let,const三者的特点和区别 一、var的特点 1、存在变量提升 console.log(a); // undefined var a = 10; // 编译过程 var a; console.log(a); // undefined a = 10; 2、一个变量可多次声明,后面的声明会覆盖... -
如何判断两个现象间存在因果关系
2020-06-10 20:15:45如何判断两个现象间存在因果关系/如何证明一个association是causal的 本博客为转载个人觉得合理的答案,不妥之处欢迎指正。 作者:程毅南 链接:https://www.zhihu.com/question/20532054/answer/15399462 来源:... -
垄断竞争市场和寡头垄断市场中生产者的行为
2019-08-27 11:00:53在垄断竞争市场上,由于产品差别性的存在,每一个企业都可在一定范围的消费者内形成自已的垄断地位。因此,与完全垄断市场上的企业相同,垄断竞争市场上企业的需求曲线是向右下方倾斜的,而不是一条水平线。 尽管... -
云计算存在哪些安全问题
2019-04-09 18:00:00近几年,随着互联网的高速发展和科技的不断进步,中国云计算市场也已经初具规模。云计算作为一种新兴的应用计算机技术,除了提供计算服务外,还提供了存储服务,当所有的计算行为和数... -
行为者网络理论(ANT,Actor Network Theory):一切皆是映射
2020-01-01 15:42:02问题模型关键词:关系思维,过程思维在计算机软件的世界里,一切都是虚拟的。一切皆是映射关系的存在。无论 OOP、FP。在现实世界里,是不是也是这样?现实世界真的存在吗?为何人生如梦?物质符... -
观察者模式与发布/订阅模式区别
2017-04-12 19:10:27在翻阅资料的时候,有人把观察者(Observer)模式等同于发布(Publish)/订阅(Subscribe)模式,也有人认为这两种模式还是存在差异,而我认为确实是存在差异的,本质上的区别是调度的地方不同。 观察者模式 ... -
你知道在网络中存在哪些安全隐患吗?IPsec如何保护网络安全?
2021-11-19 16:50:37你知道IPsec的隧道模式和传输模式区别是什么吗? 你知道华为设备如何配置IPsec吗? 别慌!不知道也没有关系,今天学姐就来跟大家讲一讲~ 网络世界存在哪些安全隐患 1、数据泄露 互联网是开放的,大家都... -
观察者模式与监听模式区别
2018-02-02 21:08:07聚合关系:如装橘子的箱子,箱子是否存在与里面装没装橘子没有任何关系,也就是说橘子不会影响箱子的存在。 d.组合关系:如一个小组,小组是否存在与小组中是否有组员是息息相关的,如果没有组员,小组就不存在... -
发布订阅模式与观察者模式
2019-03-29 18:25:12背景 设计模式并非是软件开发的专业术语,实际上,“模式”最早诞生于建筑学。...这些“好的设计”并不是谁发明的,而是早已存在于软件开发中。一个稍有经验的程序员也许在不知不觉中数次使用过这些设... -
深入理解缓存之缓存存在的问题及应对措施
2019-07-07 10:25:45指查询一个一定不存在的数据,由于缓存是不命中时被动写( 被动写,指的是从 DB 查询到数据,则更新到缓存中 )的,并且处于容错考虑,如果从 DB 查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB ... -
成员变量、类变量和静态变量三者的区别
2019-08-17 19:16:36成员变量和类变量的关系区别 [外链图片转存失败(img-7NdYk5FO-1566040524463)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1566039815355.png)] 1、两个变量的生命周期不同 成员变量随着对象... -
发布与订阅模式和观察者模式有什么不同?
2021-04-14 23:41:401. 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中, 生产者与消费者不知道对方的存在,它们之间通过频道进行通信。 2. 观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;...