2.2 为路径名动态分配空间

lib/pathalloc.c

#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;
/* If PATH_MAX is indeterminate, no guarantee this is adequate */
#define	PATH_MAX_GUESS	1024
char *
path_alloc(int *sizep) /* also return allocated size, if nonnull */
{
	char	*ptr;
	int	size;
	if (posix_version == 0)
		posix_version = sysconf(_SC_VERSION);
	if (pathmax == 0) {		/* first time through */
		errno = 0;
		if ((pathmax = pathconf("/", _PC_PATH_MAX)) < 0) {
			if (errno == 0)
				pathmax = PATH_MAX_GUESS;	/* it‘s indeterminate */
			else
				err_sys("pathconf error for _PC_PATH_MAX");
		} else {
			pathmax++;		/* add one since it‘s relative to root */
		}
	}
	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);
}

2.2 为路径名动态分配空间

时间: 2024-08-25 14:21:55

2.2 为路径名动态分配空间的相关文章

122 - Trees on the level(动态分配空间解法)

Trees on the level Background Trees are fundamental in many branches of computer science. Current state-of-the art parallel computers such as Thinking Machines' CM-5 are based on fat trees. Quad- and octal-trees are fundamental to many algorithms in

动态分配内存专题

我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗??既然有人会问这样的问题,那么我在这里好好的讲解一下吧!首先让我们熟悉一下计算机的内存吧!在计算机的系统中有四个内存区域:1)栈:在栈里面储存一些我们定义的局部变量以及形参(形式参数):2)字符常量区:主要是储存一些字符常量,比如:char *p_str="cgat";其中"cgat"就储存在字符常量区里面:3)全局区:在全

C++ 二维数组/多维数组的动态分配(new)和释放(delete)

1. 一维数组 对于简单的一维数组动态内存分配和释放,如下: int *array1D;//假定数组长度为m //动态分配空间 array1D = new int [m]; //释放 delete [] array1D; 2. 二维数组 二维数组的动态分配和释放 //假定数组第一维长度为m, 第二维长度为n //动态分配空间 <pre name="code" class="cpp">int **array2D<span style="fo

跨函数使用内存空间

所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法.动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小.凡是在程序中用到系统提供的动态分配存储空间函,均要求包含头文件<malloc.h>. Malloc 向系统申请分配size字节的存储区.返回分配内存空间的起始地址,若分配失败,则返回0,类型是 void* (或chaar*).ma

动态分配,结构,联合

(一)动态内存分配: 1.为什么要动态内存分配呢?比如,我要做一个学生成绩管理系统,这里可能需要存储每个班级所有学生的信息,但 是,我们到底要分配多大的空间呢??每个班的人数有可能并不相等,按多分配 ,那样多浪费:按少分配,不够.所以 动态内存分配就有自己的作用了~~ 2.动态内存分配函数: (1)void *malloc(unsigned  int  size);-------size是需要分配的字节数. (2)void *calloc(unsigned int num_elements,un

C/C++上二维数组的两种动态分配内存方法

最近在看一个程序的源代码的时候了解到了二维数组的动态分配空间以及释放的方法,在此记录. 一.二维数据的内存空间动态分配 方法一: void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i=0;i<xDim;i++) a[i] = new int[yDim]; assert(a!=NULL); } int main() { int **arr = NULL; malloc2D_1(arr); } 首先arr是一个二级指针,为arr分配x

C++——动态分配内存

0.  介绍 在C++中,程序的内存空间分成两部分,堆和栈. 栈:在函数中声明的所有变量都存在栈里. 堆:是程序中未使用的内存,用来在程序运行时动态分配内存空间. 在C++中可以通过new和delete操作符来控制内存空间的申请和释放. new:申请一段内存空间,并创建对象,返回内存空间的起始地址. delete:删除分配的内存空间,防止内存泄漏. 1. new new type_name new申请的内存空间可以是任意内置数据类型,也可以是自定义的结构体或者类. double* pvalue

UNIX进程环境

UNIX编程第七章 C程序总是从main函数开始执行.main的原型是: int main(int argc, char*argv[]); argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组. 当内核执行C程序时(使用exec系列函数),在调用main之前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址--这是由连接编辑器设置的,而连接编辑器则由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排. 进程终止:

C语言写郑州大学校友通讯录

1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define LEN sizeof(struct address_list) 5 6 /* 7 *************************通讯录结构体*********************************** 8 */ 9 10 struct address_list 11 { 12 char name[30]; /