zoukankan      html  css  js  c++  java
  • strace命令跟踪ping调用函数整理

    execve函数:execve(执行文件)在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。用来调用shell命令
    brk函数:是将数据段(.data)的最高地址指针_edata往高地址推。malloc小于128k的内存,使用brk分配内存
    mmap函数:是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)
    access函数:用来判断指定的文件或目录是否存在(F_OK),已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X_OK)权限。F_OK、R_OK、W_OK、X_OK这四种方式通过access函数中的第二个参数mode指定。如果指定的方式有效,则此函数返回0,否则返回-1。
    open函数:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)
    fopen与open的区别:以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回
    close函数:关闭一个已经打开的文件
    fstat函数:由文件描述符取得文件状态,fstat()用来将参数filedes 所指向的文件状态复制到参数buf 所指向的结构中(struct stat)。fstat()与stat()作用完全相同,不同之处在于传入的参数为已打开的文件描述符。
    read函数:read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
    --------
    handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。
    buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。
    n: 表示调用一次read操作,应该读多少数量的字符。
    number:表示系统实际所读取的字符数量。
    --------
    mprotect()函数:可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。
    --------
    #include <sys/mman.h>
    int mprotect(void *addr, size_t len, int prot);
    addr:修改保护属性区域的起始地址,addr必须是一个内存页的起始地址,简而言之为页大小(一般是 4KB == 4096字节)整数倍。
    len:被修改保护属性区域的长度,最好为页大小整数倍。修改区域范围[addr, addr+len-1]。
    prot:可以取以下几个值,并可以用“|”将几个属性结合起来使用:
    1)PROT_READ:内存段可读;
    2)PROT_WRITE:内存段可写;
    3)PROT_EXEC:内存段可执行;
    4)PROT_NONE:内存段不可访问。
    返回值:0;成功,-1;失败(并且errno被设置)
    1)EACCES:无法设置内存段的保护属性。当通过 mmap(2) 映射一个文件为只读权限时,接着使用 mprotect() 标志为 PROT_WRITE这种情况就会发生。
    2)EINVAL:addr不是有效指针,或者不是系统页大小的倍数。
    3)ENOMEM:内核内部的结构体无法分配。
    --------
    arch_prctl函数: 设置架构的具体进程或线程状态。代码选择一个子功能和参数地址传递给它。
    munmap函数:用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭对应的文件描述符时不会解除映射。
    capget()函数:用来获得进程的权能;capset() 用来设置进程权能。关于权能的说明,https://www.cnblogs.com/sky-heaven/p/12096758.html
    getuid()函数:用来取得执行目前进程的用户识别码。uid is 0 //当使用root 身份执行范例程序时
    setuid()函数:设置目前进程的用户识别码,setuid(0),设置为root用户
    prctl函数:给线程命名,linux下的prctl库自kernel 2.6.9后开始支持PR_SET_NAME和PR_GET_NAME选项用于设置和获取进程名字,第二个参数为设置的名字
    geteuid()函数:用来取得执行目前进程有效的用户识别码。
    socket函数:是一种可用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源的函数。用于网络通信
    connect()函数:用于建立与指定socket的连接。
    stat函数:用于获取文件信息,https://blog.csdn.net/qq_40839779/article/details/82789217
    uname函数:获取当前内核名称和其它信息。
    setsockopt()函数:用于任意类型、任意状态套接口的设置选项值。https://blog.csdn.net/c_base_jin/article/details/94353956
    poll函数:是Linux中的字符设备驱动中的一个函数。Linux 2.5.44版本后,poll被epoll取代。和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。
    SendTo函数:是一个计算机函数,指向一指定目的地发送数据,sendto()适用于发送未建立连接的UDP数据包 (参数为SOCK_DGRAM)
    ioctl函数:是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。
    recvfrom()函数:本函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。
    bind函数:把一个本地协议地址赋予一个套接字。对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合。
    getsockname()函数:用于获取一个套接字的名字。它用于一个已捆绑或已连接套接字s,本地地址将被返回。本调用特别适用于如下情况:未调用bind()就调用了connect(),这时唯有getsockname()调用可以获知系统内定的本地地址。在返回时,namelen参数包含了名字的实际字节数。
    recvmsg()和sendmsg()函数:这个两个函数是通用的I/O函数。实际上可以把所有read,readv,recv,recvfrom调用替换成recvmsg调用;类似的,各种输出函数也可以替换成sedmsg调用。
    sigaction函数:功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。
    inet_addr() 函数:作用是将点分十进制的IPv4地址转换成网络字节序列的长整型。

    Luck will be always by ourside
  • 相关阅读:
    软件架构——”淘宝网”质量属性研究
    漫谈架构——读后感
    问题账户需求分析
    关于《软件需求分析》需要掌握哪些必要的内容的总结与思考------读后感
    人月神话阅读笔记4
    **系统项目目标文档
    人月神话阅读笔记3
    人月神话阅读笔记2
    人月神话阅读笔记1
    问题账户需求分析
  • 原文地址:https://www.cnblogs.com/hrers/p/14680884.html
Copyright © 2011-2022 走看看