欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > Linux...

Linux...

2025/3/9 5:12:43 来源:https://blog.csdn.net/weixin_73223235/article/details/137993197  浏览:    关键词:Linux...

系统调用(函数)和库函数

系统调用和OS有关,直接运行在内核空间(权限大、速度快,效率低),面向硬件(可移植性差),不带缓冲;

库函数和OS无关,面向应用开发;它对系统调用进行了封装,库函数的优势:第一:双缓冲技术的实现。第二,可移植性。第三,弥补了底层调用本身的一些性能方面的缺陷。库函数调用运行在用户空间(受到权限的约束)

数学函数

数学函数头文件为math.h,在使用gcc编译时必须添加:-lm 选项。

幂运算: double pow(double x, double y)

开方运算: double sqrt(double x)

随机数:    int rand()    产生一个 0~2147483647之间的一个数

设置随机种子: void srand(unsigned int seed) 

时间

Unix/Linux以秒为单位记录时间,数据类型为time_t [_t是整数的意思]

time_t time(time_t *t)  系统调用,返回自1970.1.1午夜以来流失的秒数。

struct tm * gmtime(const time_t *timep)  转换为格林尼治时间

struct tm * localtime(const time_t * timep)  将时间转换为当地更人性化的时间。

localtime_r(const time_t * timep, *tm)  //线程安全

char * asctime(const struct tm *tp)  和 char * ctime(const time_t * t)  都是将指定时间转换为字符形式的时间,长度大概26个字母。

time_t mktime(struct tm *tp):将结构体时间转换为流失的秒数。

获取高精度时间: int gettimeofday(struct timeval *tv, struct timezone *tz):将当前系统时间填充到tv中,tz已经被废弃,一般指定为NULL。返回0表示成功,-1表示失败。

头文件:sys/time.h

环境控制函数

char * getenv(char *name):获得名称为name的环境变量的值。

int putenv(char *str):添加变量或修改变量值,str格式:name=value

extern char **environ:所有环境变量 //写在外部

env是一个获取所有环境变量的命令

内存分配

void *malloc(size_t size):分配一个大小为size的内存块,不做初始化,返回一个无类型指针。 void *calloc(size_t nmemb, size_t size):分配size个大小为nmemb的内存块,返回的是一个无类型指针数组。

free(void *ptr):释放ptr指向的内存。//不释放容易内存泄漏

内存映射 

void *mmap(void *start, size_t len, int port, int flags, int fd, off_t offset)

系统调用,将指定文件内容映射到内存中,对该区块内存的存取即对该文件的存取。//不会丢失

头文件:sys/mman.h start: 内存起始地址,一般设为NULL len:分配内存大小

fd:文件描述符

offsize:映射文件内容的起始位置,设为0表示映射整个文件

flags:指定映射类型。

MAP_SHARED:共享内存,对内存的修改其它进程可见,同时反映到文件;

MAP_PRIVATE:修改其它进程不可见,且不反映到文件。

Map_SHARED和MAP_PRIVATE必须二选一。MAP_FIXED:若指定了start,且使用start无法创建成功,则放弃映射;不推荐使用。

解除映射—munmap

int munmap(void *addr, size_t len)     addr:待解除内存起始地址     len:大小

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词