`
zhengdl126
  • 浏览: 2509705 次
  • 性别: 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系统调用跟踪工具的使用方法,列举了工程实践中常遇到的调试手段和解决方法。

    strace调试工具移植.zip

    strace strace strace strace strace strace strace strace strace strace strace strace strace strace strace 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) ...

    strace命令 跟踪系统调用

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

    strace-4.5.20.tar.bz2

    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...

    strace-4.11 源码

    strace-4.11 源码。 strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等

    linux的strace命令(详解)

    strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。

    strace-4.5.

    strace-4.5.15.tar(1).

    strace-4.11源代码下载

    strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用。 Strace是一个简单的跟踪系统调用执行的工具。在其最简单的形式中,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出...

    strace-4.5.16.tar.bz2

    1.下载 strace-4.5.16.tar.bz2,不要下载最新的strace-4.5.18.tar.bz2,因为后者编译会出错。下载网址是:http://sourceforge.net/project/showfiles.php?group_id=2861&package_id=2819; 2.配置。./configure --...

    strace mv A B

    本附件是执行strace mv A B打印出的调用栈

    使用 strace 命令来监控内存分配,找出OOM的原因

    使用 strace 命令来监控内存分配,找出OOM的原因 由于使用 Netty 导致的,那错误日志里可能会出现 OutOfDirectMemoryError 错误 如果直接是 DirectByteBuffer,那会报 OutOfMemoryError Direct buffer memory

    strace for windows 已编译 straceNT.exe

    之前上传了strace for windows 源码,但有些人表示 不会编译,现在上传已经编译后的straceNT.exe,可以直接运行。编译环境为Windows 10 x64位操作系统。

    strace python3.6部分日志.txt

    strace python3.6部分日志,定位No module named 'pip'问题

    Linux用strace查看系统调用

     strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统...

    strace工具5.3版本

    Strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, ...

    arm平台的strace

    移植strace到arm平台,并编译为静态连接,直接把strace拷到/bin下即可使用

    gdb-6.7&strace-4.5.15

    arm平台调试工具,gdb和strace

Global site tag (gtag.js) - Google Analytics