zoukankan      html  css  js  c++  java
  • 3、应用层常用lib函数使用说明

    1、mmap函数

    void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

    start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。
    length:映射区的长度。//长度单位是 以字节为单位,不足一内存页按一内存页处理
    prot:期望的内存保护标志,不能与文件的打开模式冲突。是以下的某个值,可以通过or运算合理地组合在一起
    PROT_EXEC //页内容可以被执行
    PROT_READ //页内容可以被读取
    PROT_WRITE //页可以被写入
    PROT_NONE //页不可访问
    flags:指定映射对象的类型,映射选项和映射页是否可以共享。它的值可以是一个或者多个以下位的组合体
    MAP_FIXED //使用指定的映射起始地址,如果由start和len参数指定的内存区重叠于现存的映射空间,重叠部分将会被丢弃。如果指定的起始地址不可用,操作将会失败。并且起始地址必须落在页的边界上。
    MAP_SHARED //与其它所有映射这个对象的进程共享映射空间。对共享区的写入,相当于输出到文件。直到msync()或者munmap()被调用,文件实际上不会被更新。
    MAP_PRIVATE //建立一个写入时拷贝的私有映射。内存区域的写入不会影响到原文件。这个标志和以上标志是互斥的,只能使用其中一个。
    MAP_DENYWRITE //这个标志被忽略。
    MAP_EXECUTABLE //同上
    MAP_NORESERVE //不要为这个映射保留交换空间。当交换空间被保留,对映射区修改的可能会得到保证。当交换空间不被保留,同时内存不足,对映射区的修改会引起段违例信号。
    MAP_LOCKED //锁定映射区的页面,从而防止页面被交换出内存。
    MAP_GROWSDOWN //用于堆栈,告诉内核VM系统,映射区可以向下扩展。
    MAP_ANONYMOUS //匿名映射,映射区不与任何文件关联。
    MAP_ANON //MAP_ANONYMOUS的别称,不再被使用。
    MAP_FILE //兼容标志,被忽略。
    MAP_32BIT //将映射区放在进程地址空间的低2GB,MAP_FIXED指定时会被忽略。当前这个标志只在x86-64平台上得到支持。
    MAP_POPULATE //为文件映射通过预读的方式准备好页表。随后对映射区的访问不会被页违例阻塞。
    MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。
    fd:有效的文件描述词。一般是由open()函数返回,其值也可以设置为-1,此时需要指定flags参数中的MAP_ANON,表明进行的是匿名映射。
    off_toffset:被映射对象内容的起点。
     
    2、fstat、stat、lstat
    函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中

    int stat(const char *path, struct stat *buf); 

    int fstat(int filedes, struct stat *buf); 
    int lstat(const char *path, struct stat *buf); 
    参数:   
    path:文件路径名。 
    filedes:文件描述词。 
    buf:保存文件信息的结构体 
    返回说明:   
    成功执行时,返回0。失败返回-1,errno被设为以下的某个值   
    EBADF:  文件描述词无效 
    EFAULT: 地址空间不可访问 
    ELOOP:  遍历路径时遇到太多的符号连接 
    ENAMETOOLONG:文件路径名太长 
    ENOENT:路径名的部分组件不存在,或路径名是空字串 
    ENOMEM:内存不足 
    ENOTDIR:路径名的部分组件不是目录  
    下面放大的部分是他们的区别:
     fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

    stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的

    3、snprintf()函数

    snprintf()函数用于将格式化的数据写入字符串,其原型为:
        int snprintf(char *str, int n, char * format [, argument, ...]);

    【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。

    【返回值】成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中。

    snprintf()可以认为是sprintf()的升级版,比sprintf()多了一个参数,能够控制要写入的字符串的长度,更加安全,只要稍加留意,不会造成缓冲区的溢出。

    4、sscanf 读取格式化的字符串中的数据。

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

    sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。

    5、strlen

    strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符''为止,然后返回计数器值(长度不包含'')。

    6、system()

    通过system可以执行指令,把指令字符串放入buf中,system(buf)来执行,buf是指针

    7、readlink()

    通过readlink可以读取一个链接文件所指向的真实路径

    8、strstr()(strcasestr在查找的时候忽略大小写)

    原型char *strstr(const char *h,const char*b);在字符串h中查找字符串b,返回b在h中第一次出现的位置的开始位置

    9、opendir(tmpBuf)

    打开tmpBuf路径所指的目录,返回一个DIR结构体指针dir,通过while((entry = readdir(dir)))可以一个个取出目录中的文件,entry ->d_name

  • 相关阅读:
    mysql安装
    Python中的 _init__和 _new__的区别
    MySQL系列
    彻底解决编码问题
    人生三问之前后端分离是什么鬼?
    什么是内存泄漏?什么是内存溢出?
    目录
    虚拟环境的使用
    如何为Redis中list中的项设置过期时间
    Redis分布式锁的python实现
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8535299.html
Copyright © 2011-2022 走看看