`

为路径名动态地分配空间

阅读更多
#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。

分享到:
评论

相关推荐

    IO输入输出留

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

    RemoteCall

    利用远程线程注入DLL 1)、取得远程进程的进程ID;... 5)、调用CreateRemoteThread函数以从Kernel32.dll中取得的LoadLibrary函数的地址为线程函数的地址,以我们要注入的DLL文件名为参数,创建远程线程;

    模拟linux文件系统

    目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。 (2) 改变目录:改变当前工作目录,目录不存在时给出出错信息。 (3) 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、...

    C语言编写虚拟文件系统

    cd 目录名(路径名) 切换当前目录到指定目录 mkdir 目录名 在当前目录创建新目录 rmdir 目录名 在当前目录删除指定目录 create 文件名 在当前目录下创建指定文件 rm 文件名 在当前目录下删除指定...

    Virtual-File-System-Simulator:假设您有一个虚拟文件系统,其根目录称为“root”,所有文件和文件夹都将存储在其下。 磁盘大小由 N 个块组成,每个块大小为 1 KB。 此作业的目的是使用不同的分配技术模拟文件和文件夹的分配和取消分配。 实现下面列出的两种分配技术(请参阅教科书中的文件系统章节)

    索引分配 运行应用程序后,用户将通过一系列命令与您的虚拟文件系统交互,这些命令如下所示: 系统命令: 命令摘要 CreateFile root/file.txt 100 此命令用于创建名为“file .txt”在路径“root”下大小为 ...

    shared-ptr(智能指针)举例.pdf

    要确保⽤ new 动态分配的内存空间在程序的各条执⾏路径都能被释放是⼀件⿇烦的事情。 11 模板库的 &lt;memory&gt; 头⽂件中定义的智能, 即 shared _ptr 模板,就是⽤来部分解决这个问题的。 只要将 new 运算符返回的指针...

    VBSCRIPT中文手册

    ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序中的注释。 Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,...

    vb Script参考文档

    ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序中的注释。 Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,...

    VBScript 语言参考

    ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序中的注释。 Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,...

    VBScript 语言参考中文手册CHM

    ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序中的注释。 Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,...

    VBSCRIP5 -ASP用法详解

    ReDim 语句 声明动态数组变量,并分配或重新分配过程级的存储空间。 RegExp 对象 提供简单正则表达式的支持。 Rem 语句 包含程序中的注释。 Replace 函数 返回一个字符串,其中某个指定的子串被另一个子串替换,...

    Oracle9i的init.ora参数中文说明

    说明: 指定用于将生成的 C 文件编译为目标文件的 C 编译程序的完整路径名。此参数是可选的。随每个平台附带的特有的 make 文件中包含此参数的默认值。如果为此参数指定了一个值, 则该值将覆盖 make 文件中的默认值...

    东大22春《计算机应用基础》在线平常作业2.docx

    A、\计算机名\路径名\文档名 B、文档名\路径名\计算机名 C、\计算机名\路径名文档名 D、\计算机名路径名文档名 6.在EXCEL中,假定一个单元格所存入的公式为"=13*2+7",则当该单元格处于编辑状态时显示的内容为_____...

    OS 操作系统 进程 线程 文件 设备 C# 多用户 登陆 课程设计 报告 算法 FCFS

    表示文件结束,同时将结果写入文件out,其中包括文件路径名和i的值。 用户接口 用户接口提供用户命令接口,要求文件名中既可以支持相对路径的文件名,也可支持绝对路径的路径 名。要求实现以下命令: 创建文件:...

    DLL注入实例+教程

    //使用WriteProcessMemory函数将DLL的路径名写入到远程进程的内存空间 if WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, WriteSize) and (WriteSize = memSize) then ...

    操作系统(内存管理)

    要试着运行这些示例,需要先 复制本代码清单,并将其粘贴到一个名为 malloc.c 的文件中。接下来,我将一次一个部分地对该清单进行解释。 在大部分操作系统中,内存分配由以下两个简单的函数来处理: void *...

    Vb简单实现摄像头视频监控程序.rar

     Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START 22 '为捕捉文件预分配空间,从而可以减少被漏掉的帧  Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START 23 '将捕捉文件保存为另一个用户指定的文件。这个消息...

    内存管理内存管理内存管理

    要试着运行这些示例,需要先复制本代码清单,并将其粘贴到一个名为 malloc.c 的文件中。接下来,我将一次一个部分地对该清单进行解释。 在大部分操作系统中,内存分配由以下两个简单的函数来处理: void *...

    API之网络函数---整理网络函数及功能

    AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 AddMonitor 为系统添加一个打印机监视器 AddPort 启动“添加端口”对话框,允许用户在系统可用端口列表中...

    九酷网络个人主页空间管理系统v6.0免费版

    2、空间域名:您可以为免费用户分配一个域名如free.9cool.net,同时IIS中绑定free.9cool.net域名到D:\free\,那么以后所有该类型用户站点的真实域名都是http://free.9cool.net/用户名如果您需要带支付接口、二级域名...

Global site tag (gtag.js) - Google Analytics