`
zhengdl126
  • 浏览: 2548862 次
  • 性别: 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索引的不是套接字

 

 

 

 

分享到:
评论

相关推荐

    Linux技巧汇总

    10. **故障排查和性能分析**:`strace`跟踪系统调用,`gdb`调试程序,`lsof`查看打开文件,`iostat`、`vmstat`和`top`监控系统性能。 这个“Linux技巧汇总”可能会涵盖以上及更多内容,每个主题下又可能包含许多...

    LinuxOS课程练习代码(第一周汇总)

    在本压缩包“LinuxOS课程练习代码(第一周汇总)”中,包含了针对软件工程08级学生学习“Linux操作系统原理与应用”课程的实践练习。这些代码旨在帮助学生深入理解Linux操作系统的基本概念和工作原理,提升实际操作...

    常用的Linux命令汇总

    1. **`man`**: 显示手册页,提供关于命令、配置文件或函数等的详细文档。 2. **`help`**: 许多内置Shell命令支持`help`选项来展示其用法。 #### 二、文件和目录操作命令 1. **`ls`**: 列出目录内容。 - **示例**:...

    dtrace for MAC

    - **与 strace 对比**:strace 主要关注于系统调用层面的信息记录,而 DTrace 能够提供更广泛和更细致的跟踪。 - **与 ltrace 对比**:ltrace 专注于库函数调用,而 DTrace 的范围更广,可以覆盖整个系统层面。 ###...

    使用ltrace工具跟踪PHP库函数调用的方法.pdf

    首先,`ltrace` 是类似 `strace` 的工具,但它的重点在于跟踪应用程序对共享库的调用,而不是操作系统级别的系统调用。在 PHP 开发中,`ltrace` 可以帮助我们理解 PHP 代码在运行时如何与 PHP 引擎以及其依赖的各种...

    pi.rar_PI_linux 多线程_多线程_多线程求pi

    在调试和分析多线程程序时,工具如`gdb`(GNU调试器)和`strace`(系统调用跟踪)可以提供帮助,它们可以帮助开发者追踪线程行为,查找潜在的问题。性能分析工具如`gprof`或`perf`则能揭示程序的性能瓶颈,指导优化...

Global site tag (gtag.js) - Google Analytics