`

为路径名动态地分配空间

阅读更多
#include "apue.h"
#include <errno.h>
#include <limits.h>

#ifdef PATH_MAX
static int pathmax=PATH_MAX;
#else
static int pathmax=0;
#endif

#define SUSV3 200112L

static long posix_version=0;

#define PATH_MAX_GUESS 1024

char * path_alloc(int *sizep)
{
	char *ptr;
	int size;
	
	if(posix_version == 0)
		posix_version= sysconf(_SC_VERSION);

	if(pathmax == 0){
		errno=0;
		if((pathmax= pathconf("/",_PC_PATH_MAX))<0){
			if(errno == 0)
				pathmax=PATH_MAX_GUESS;
			else
				err_sys("pathconf error for _PC_PATH_MAX");
		}else{
			pathmax++;
		}
	}

	if(posix_version < SUSV3)
		size=pathmax+1;
	else
		size=pathmax;

	if((ptr = malloc(size)) == NULL)
		err_sys("malloc error for pathname");

	if(sizep !=NULL)
		*sizep=size;

	return ptr;
}

 

         如果在<limits.h>中定义了常量PATH_MAX,那么就没有任何;如果没有定义,则需调用pathconf。因为pathconf的返回值是基于工作目录的相对路径名的最大长度,而工作目录是其第一个参数,所以,指定根目录为第一个参数,并将得到的返回值加1作为其结果值。如果pathconf指明PATH_MAX是不确定的,那么我们只能猜测某个值。

       对于PATH_MAX是否在路径名末尾包括一个null字符这一点,SUS v3之前的标准表述得不清楚。出于安全方面的考虑,如果操作系统实现遵循先前的标准版本,则需要在为路径名分配的存储数量上加1。

分享到:
评论

相关推荐

    kuining.zip_resource allocation_最大后验概率_最大路径_资源分配_资源分配算法

    "kuining.zip_resource allocation_最大后验概率_最大路径_资源分配_资源分配算法"这个压缩包文件可能包含一个名为"kuining.m"的Matlab程序,该程序可能用于演示或实现基于最大后验概率(MAP)和最大似然(ML)准则...

    学习oracle创建一个表空间创建临时表空间创建用户表空间资源的权限

    - **更改表空间状态**:使用`ALTER TABLESPACE`可以设置表空间为只读或可读写。 - **重命名表空间**:使用`ALTER TABLESPACE RENAME TO`语句可以改变表空间的名称。 - **删除表空间**:使用`DROP TABLESPACE`删除...

    oracle创建表空间用户等

    例如,要创建名为`example_tbs`的表空间,并指定数据文件路径为`D:\data.dbf`,初始大小为100MB,可以执行以下SQL命令: ```sql CREATE TABLESPACE example_tbs DATAFILE 'D:\data.dbf' SIZE 100M; ``` #### 二、...

    创建表空间命令语句

    - 类似地,通过更改表空间名称、数据文件路径、初始大小、自动扩展增量和空间分配单元大小,可以创建多个不同的表空间,例如`NNC_DATA02`、`NNC_DATA03`、`NNC_INDEX01`、`NNC_INDEX02`和`NNC_INDEX03`等。...

    仿真了MIMO在自由空间信道条件下注水功率分配方式,详细的M文件及注释.zip

    在这个压缩包中,包含了一个名为“仿真了MIMO在自由空间信道条件下注水功率分配方式,详细的M文件及注释.m”的M文件。这个M文件很可能是用MATLAB编写的一个仿真程序,用于模拟MIMO系统在自由空间信道环境下的工作...

    Oracle用户(user)和表空间(tablespace).pdf

    本文主要探讨了 Oracle 用户(user)和表空间(tablespace)的相关概念、创建、配置、修改以及删除等核心操作,旨在为初学者提供一个清晰的学习路径。 首先,Oracle 用户是数据库的访问实体,它代表了数据库的认证...

    db2表空间详解

    DMS表空间需要在创建时明确指定容器的设备名或文件名以及分配的空间大小,而SMS表空间则由DB2自动管理存储资源。 - **非自动存储管理(DMS)表空间**:在创建时需指定具体的存储位置和容量。适用于对存储有特殊需求...

    Oracle建立表空间.pdf

    创建表空间是为了更好地管理和分配存储资源。 #### 二、创建表空间的基本命令 创建表空间的基本命令格式如下: ```sql CREATE TABLESPACE 表空间名 DATAFILE '数据文件路径' SIZE 表空间大小 [ AUTOEXTEND ON | ...

    eclipse设置工作空间

    - **自定义工作空间图标**:可以在工作空间根目录下创建一个名为 `.metadata/.plugins/org.eclipse.core.runtime/.icons` 的文件夹,并在其中放置一个名为 `workspace.png` 的图片文件作为工作空间的图标。...

    Linux下查看PCI设备配置空间方法_有源代码模块示例

    在`pciRegRead.rar`中,可能包含了一个名为`pciRegRead`的函数或者模块,这个模块实现了直接读取PCI设备配置空间的功能。在提供的文本文件中,`Linux下查看PCI设备配置空间方法_有源代码模块示例.txt`和`Linux下查看...

    IO输入输出留

    *表示磁盘文件或目录的路径 *可以表示一个不存在的路径 创建实例 ------------------------------------- 1 File f=new File("d:/abc") (d:\\abc) 2 File f=new File ("目录","文件名") 创建一个 File 封装对象 ...

    第二最短路径问题

    在这个压缩包文件中,名为"第二最短路径"的文件很可能是C语言编写的程序代码,用于解决这个问题。通过阅读和理解代码,初学者可以学习如何将图论概念转化为实际的编程实现,进一步掌握C语言的编程技巧和算法应用。 ...

    orale创建表空间

    这种方式允许数据库动态地调整段的大小,提高空间利用率。 - `UNIFORM`:指定固定大小的段。默认值通常是 1MB。这种方式适合于不需要自动调整段大小的应用场景。 #### 五、总结 创建表空间是 Oracle 数据库管理的...

    创建表空间参数详解

    其中 filename 是数据文件的全路径名,size 是文件的大小,REUSE 表示文件是否被重用。AUTOEXTEND 表明是否自动扩展。 4、Minimum Extent MININUM EXTENT integer [k|m] 指出在表空间中范围的最小值。这个参数可以...

    orcale中创建表空间

    以上命令创建了一个名为`zhaiwenhao`的用户,密码为`jack`,默认表空间为`test_data`,临时表空间为`user_temp`。 ### 授予用户权限 为了使用户能够访问数据库和执行特定操作,必须授予相应的权限。 ```sql grant...

    oracle最新创建表空间说明

    通过以上步骤,我们不仅创建了一个新的表空间 `Ffan`,还创建了一个用户 `fan` 并指定了其默认表空间为 `Ffan`,同时赋予了该用户必要的权限。这对于实际操作Oracle数据库来说是非常重要的基础步骤之一。通过这种...

    oracle表空间学习整理,包括常用sql

    例如,创建一个名为`userspace`的表空间,并添加一个数据文件: ```sql CREATE TABLESPACE userspace DATAFILE '/u01/app/oracle/oradata/mydb/userspace.dbf' SIZE 100M; ``` 四、常用SQL操作 1. 查看表空间信息:...

    表空间的扩充方法

    例如,向名为`ZZYW`的表空间添加一个大小为2GB的新数据文件`ZZYW02.DBF`: ```sql ALTER TABLESPACE ZZYW ADD DATAFILE 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\ZZYW02.DBF' SIZE 2G; ``` **2. 设置表空间自动增长** ...

    Oracel扩展表空间

    - 解释:这条命令向名为`TESTTBS`的表空间添加一个新的数据文件,初始大小为500MB,可以自动扩展,每次扩展50MB,最大不超过2GB。 2. **增加现有数据文件的大小**: - 示例命令: ```sql ALTER DATABASE DATA...

Global site tag (gtag.js) - Google Analytics