`
zhengdl126
  • 浏览: 2538912 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

【汇总】strace 系统函数

 
阅读更多

 

poll  fstat stat mmap sendto  recvmsg recv

getcwd

 

 

 

 

 

 

 

 


=============== poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。

#include <poll.h>
int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);
 
返回:就绪描述字的个数,0-超时,-1-出错

第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。

第二个参数nfds是用来指定数组fdarray的长度。

最后一个参数timeout是指定poll函数返回前等待多长时间。它的取值如下:

timeout值     说明
INFTIM     永远等待
0     立即返回,不阻塞进程
>0     等待指定数目的毫秒数

 

 

 

================= stat  fstat  lstat

int stat(const char *restrict pathname, struct stat *restrict buf);
提供文件名字,获取文件对应属性。感觉一般是文件没有打开的时候这样操作。

int fstat(int filedes, struct stat *buf);
通过文件描述符获取文件对应的属性。文件打开后这样操作

int lstat(const char *restrict pathname, struct stat *restrict buf);
连接文件

三个函数的返回:若成功则为0,若出错则为-1

给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。
第二个参数是个指针,它指向一个我们应提供的结构。这些函数填写由buf指向的结构。

 

 

 

======================== mmap

Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明:

 

 

 

mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作。而Posix或系统V的共享内存IPC则纯粹用于共享目的,当然mmap()实现共享内存也是其主要应用之一。
         mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

 

 


内存映射的步骤:
    用open系统调用打开文件, 并返回描述符fd.
    用mmap建立内存映射, 并返回映射首地址指针start.
    对映射(文件)进行各种操作, 显示(printf), 修改(sprintf).
    用munmap(void *start, size_t lenght)关闭内存映射.
    用close系统调用关闭文件fd.

 

 

 

=================== getcwd  取当前工作目录

 

 

 

 

 

 

================== recv/recvfrom/recvmsg系统调用

功能描述:
从套接字上接收一个消息。对于recvfrom 和 recvmsg,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。
如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。
假如套接字上没有消息可以读取,除了套接字已被设置为非阻塞模式,否则接收调用会等待消息的到来。




返回说明:  
成功执行时,返回接收到的字节数 。另一端已关闭则返回0。失败返回-1,errno被设为以下的某个值  
EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时
EBADF:sock不是有效的描述词
ECONNREFUSE:远程主机阻绝网络连接
EFAULT:内存空间访问出错
EINTR:操作被信号中断
EINVAL:参数无效
ENOMEM:内存不足
ENOTCONN:与面向连接关联的套接字尚未被连接上
ENOTSOCK:sock索引的不是套接字

 

 

 

 

分享到:
评论

相关推荐

    strace跟踪工具使用手册

    Strace是一个在Linux环境下用于诊断、调试和跟踪系统调用和进程间通信的工具。它通过跟踪和记录指定进程对内核的调用和接收的信号,将系统调用的名字、参数、返回值打印出来,这对于解决和定位问题非常有帮助。 在...

    嵌入式linux下移植strace调试应用程序工具源码

    `strace`通过拦截和记录进程的系统调用来运行,它可以显示调用的系统函数、参数、返回值等信息,这对于理解和解决程序与操作系统之间的交互问题非常有帮助。特别是在资源受限的嵌入式环境里,了解程序对系统资源的...

    strace-5.15 arm和arm64架构,Android可用

    在信息技术领域,尤其是在系统调试和性能分析中,strace是一个不可或缺的工具。它能够帮助我们跟踪和记录Linux系统调用,以及进程间的信号传递,从而揭示程序在操作系统级别上的行为。本文将深入探讨strace 5.15版本...

    strace-4.5.

    在Linux操作系统中,strace是一个非常实用的系统调用跟踪工具,它能够帮助开发者和系统管理员深入了解程序与操作系统内核之间的交互。本文将围绕strace-4.5.15版本,详细探讨其功能、原理及实际应用,旨在为读者提供...

    strace for windows 已编译 straceNT.exe

    strace是一个在Unix-like系统中广泛使用的系统调用跟踪工具,用于监控进程对系统调用的使用情况,以及这些调用的参数和返回值。在这里,作者提供了已编译好的版本,避免了用户自行编译的麻烦。 描述中提到,作者...

    strace调试工具移植.zip

    strace strace strace strace strace strace strace strace strace strace strace strace strace strace strace strace

    strace 各种架构的静态编译版本

    strace-armv4l 23-Sep-2014 12:38 277K strace-armv4tl 23-Sep-2014 12:39 295K strace-armv5l 23-Sep-2014 12:39 295K strace-armv6l 23-Sep-2014 12:39 295K strace-i486 23-Sep-2014 12:37 249K strace-i586...

    linux的strace命令(详解)

    每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 Strace 命令的工作原理是使用 ptrace 系统调用跟踪调试运行中的进程,详细原理不在本文讨论范围内,有兴趣可以参考 Strace ...

    免安装strace strace.zip

    免安装strace [root@vmtca-2003 strace-5.1]# ldd strace linux-vdso.so.1 (0x00007ffc14ffb000) librt.so.1 =&gt; /lib64/librt.so.1 (0x00007fe620539000) libc.so.6 =&gt; /lib64/libc.so.6 (0x00007fe620174000) ...

    arm平台的strace

    strace是一个非常实用的系统调用跟踪工具,它允许开发者监控和记录程序执行过程中的系统调用以及接收到的信号,这对于调试、性能分析以及理解程序与操作系统之间的交互至关重要。 描述中提到的“移植strace到arm...

    strace_source_code.tar.gz

    strace,这个在Linux世界中不可或缺的系统调用追踪工具,是开发者和系统管理员的得力助手。它允许我们监控进程对系统调用的使用情况,从而洞察程序运行的底层细节。本文将详细探讨strace的源码及其在Aarch64-Linux-...

    strace命令 跟踪系统调用

    strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。 strace常用来跟踪进程执行时的系统...

    strace-4.5.15.tar.bz2.rar

    在Linux操作系统中,strace是一个非常实用的系统调用跟踪工具,它能够帮助开发者和系统管理员了解程序在运行过程中与操作系统的交互细节,包括系统调用的使用、参数传递以及返回值。本文将基于"strace-4.5.15.tar(1)...

    strace-4.5.20.tar.bz2

    strace 命令是一种强大的工具, 能够显示任何由用户空间程式发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. strace 从内核接收信息, 而且无需以任何特别的方式来构建内核. strace 的每一行输出包括...

    strace_pstack-master.zip_pstack_strace

    在Linux系统中,`strace`和`pstack`是两个非常重要的系统调用跟踪工具,它们对于理解和调试进程的行为有着不可替代的作用。本压缩包`strace_pstack-master.zip`包含了与这两个工具相关的脚本,旨在帮助用户深入学习...

    linux下的程序调试工具ltrace和strace终版.pdf

    例如,在上面的示例中,使用 ltrace 工具可以看到程序调用了 puts() 库函数,而使用 strace 工具可以看到程序的系统调用过程,包括 execve、brk、access、mmap2、open、read、fstat64、close 等系统调用。...

    Strace(Source_Code).zip_gnu strace pudn_strace

    Strace是一款强大的Linux系统工具,用于跟踪进程执行时的系统调用和信号。它能帮助开发者深入了解程序在操作系统级别如何工作,特别是在解决程序错误、性能问题或者分析与系统交互细节时非常有用。"Strace(Source_...

    gdb-6.7&strace-4.5.15

    `gdb`(GNU调试器)和`strace`是两种强大的Linux系统级工具,它们主要用于理解和解决与程序执行相关的问题。在这里,我们将深入探讨这两个工具及其在ARM平台上的应用。 `gdb`是一个开源的、跨平台的调试器,它支持...

    strace实验报告1

    例如,strace -c ./test显示了read和write函数的调用统计,以及其他系统调用的详细信息。 在分析挂起进程时,strace能揭示进程在用户态还是内核态挂死。当进程在用户态挂死,strace的输出会在最后一个系统调用之前...

Global site tag (gtag.js) - Google Analytics