【Linux C高级编程——文件操作之系统调用】教程文章相关的互联网学习教程文章

如何在发送大量UDP数据包时减少系统调用开销? (Windows和Linux)

例如,我在Windows上发送100000个UDP数据包.对于每个数据包,我需要调用一次WSASendTo(),因此可能会引入大量的系统调用开销.有没有办法进行批量发送并减少这种开销?谷歌搜索一段时间后,我找不到适合Windows的解决方案.此外,我想知道这是否可以在Linux上.谢谢.解决方法:在Windows上,您可以在Server 2012和Windows 8及更高版本上使用新的Windows注册I / O API(RIO). 我已经写了很多关于它的内容here并且已经与Windows上可用的以前的AP...

linux – x86_64程序集execve * char []系统调用【代码】

我试图在不使用标准库的情况下进入一些Linux 64位x86程序集,但是我在处理提交给我的程序(argv)的参数时遇到了一些问题.我认为(基于文档)rsp标志着argc qword的开始,而[rsp 8]将是argv.不幸的是情况并非如此,以下(删节)程序会导致EFAULT(错误地址).sys_execve equ 59 sys_exit equ 60section .datachild db "/bin/sh", 0global _startsection .text_start:mov rdi, child ; #1 filenamemov rsi, [rsp + 8] ; #2 argvmov r...

如何根据Linux系统调用实现后台处理?【代码】

如何在Linux系统调用方面实现后台处理(例如,在Bash中)? 我的问题的目的是我不明白为什么bash手册说asynchronous commands are invoked in a subshell environment,(如果我是正确的,“aynchronous commands”意味着在后台运行命令),而通过使用strace,我发现父shell进程首先调用clone()来创建一个子shell,它是自身的副本,然后subshel??l调用execve()将subshel??l本身替换为在后台运行的命令. 这就像运行前台进程一样.我没有看到在子...

如何从Linux内核空间添加自定义扩展属性(即从自定义系统调用)【代码】

如何添加扩展属性,如命令行函数setfattr -n user.custom_attrib -v 99 ex1.txt,但是在自定义系统调用中从内核中执行此操作.我看过linux / xattrib.h,我没有运气试图从内核空间设置任何东西.我曾经使用过vfs_setxattr(struct dentry *,const char *,const void *,size_t,int);它重新启动整个VM.最后,我试图将新的整数类型添加为文件的扩展属性,我还需要检索该扩展属性.我需要使用内核空间中允许的函数.解决方法:我能够获得扩展属性:...

linux – 可以ptrace判断x86系统调用是否使用了64位或32位ABI?

我正在尝试使用ptrace跟踪由单独进程生成的所有系统调用,无论是32位(IA-32)还是64位(x86-64).我的跟踪器将在启用了IA-32仿真的64位x86安装上运行,但理想情况下可以跟踪64位和32位应用程序,包括64位应用程序是否分叉并执行32位进程. 问题在于,由于32位和64位系统调用号不同,我需要知道进程是32位还是64位来确定它使用哪个系统调用,即使我有系统调用号.似乎有imperfect methods,比如检查/ proc /< pid> / exec或(作为strace)寄存器st...

c – Linux:通过ptrace()执行系统调用【代码】

嘿:)我目前正在为x86 / x64 Linux开发一个memoryhacking-library.我努力的目的是实现某种远程系统调用执行. 这是我的代码,当我尝试执行有效的系统调用时,它只会崩溃其他进程. (我在代码中使用的所有函数都是ptrace的包装器)你可以在这里找到完整的代码:http://code.google.com/p/ethonmem/source/browse/long Debugger::executeSyscall(unsigned long code, std::vector<unsigned long> const& args) const {// Backup registers....

系统调用在linux中的iomapped内存失败.【代码】

我将一些io内存映射到驱动程序中的vmalloced区域.我也使用flag(ioremap_page_range中的PAGE_SHARED)与用户进程共享此区域. 现在我可以将这个共享内存访问到用户空间.我可以写这个记忆.但是,如果我将此内存作为缓冲区传递给系统调用(如recv或send),则调用将因内存不足而失败(内存未映射到用户进程). 但是,我确信我的缓冲区没有任何问题.因此,我共享内存和错误检查系统调用的方式似乎存在一些冲突. 驱动代码:shared_buf = __get_vm_...

linux – 套接字,TCP状态和写入系统调用【代码】

我一直在使用一个简单的服务器,它每30秒向一个客户端发送一个心跳包,然后通过心跳回复包确认心跳.当我通过发送SIGKILL,SIGSEGV来粗暴地终止服务器时,客户端通过select()和read()系统调用很容易发现它.然后我开始想知道当你在客户端写入其心跳回复数据包之前这样做会发生什么,所以我在客户端代码中放置了20秒的睡眠并且同时杀死了服务器但发现客户端写入仍然成功.紧接着尝试第二次写入会触发预期的SIGPIPE信号并写入返回的EPIPE.据我...

Linux系统调用--getrlimit()与setrlimit()函数详解【代码】

功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。 用法:#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(int resource, const struct...

Linux下增加系统调用的方法

1.linux系统调用的基本原理linux的系统调用形式与POSIX兼容,也是一套C语言函数名的集合。然而,linux系统调用的内部实现方式却与DOC的INT 21H相似,它是经过INT 0X80H软中断进入后,再根据系统调用号分门别类地服务。从系统分析的角度,linux的系统调用涉及4个方面的问题。(1)与系统调用有关的数据结构和函数函数名以“sys_”开头,后跟该系统调用的名字。例如,系统调用fork()的响应函数是sys_fork()(见Kernel/fork.c),exit()的响...

Linux系统调用列表

以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。 按照惯例,这个列表以man pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作...

linux – Bash中select()系统调用的等价物

在我的脚本中,我试图从几个串口读取数据以协调多个设备. 我可以使用exec 9< / dev / ttyACM0&&& exec 8< / dev / ttyACM1等我正在跳跃,然后我可以对这些文件描述符执行类似select()的操作以等待数据到达,然后使用读取0<& 9或读取0< 8取决于哪一个已接收数据来处理它.不幸的是我找不到Bash的select()等价物. 我能找到的最接近的是使用read -t 0 0<& 9来轮询要读取的数据.我不喜欢这个,因为它需要睡眠以防止脚本消耗100%的处理器.虽...

linux – 系统调用期间的用户模式和内核模式切换

在广泛的层面上,在linux系统调用期间发生以下哪种情况. >用户模式进程升级到内核模式并执行内核代码(中断服务例程),然后返回到正常模式.换句话说,正是消耗CPU的用户进程.>有一个内核进程始终在内核模式下运行.用户模式处理将任务(以系统调用的形式)分派给内核进程.内核进程完成作业并将结果返回给用户模式进程.换句话说,用户进程在此期间处于空闲状态,而内核进程是消耗CPU的一个进程.>别的.解决方法:它主要是1但有点2. 从usermode应...

linux – 确定进程花费时间等待的系统调用或子系统【代码】

我正在寻找方法来了解进程或线程花费时间等待的系统调用或哪些子系统,即阻塞和未安排在CPU上运行. 特别是如果我有一些未知的过程,或者我们所知道的过程“很慢”,我希望能够学到以下内容: >“它将80%的时间花在sys_write()上的fd 13上,这是/ some / file”>“它花了很多时间等待从网络套接字读取()”>“它正在epoll_wait()中为fds [4,5,6]上的活动而睡觉,它们是[file / boo],[socket 10.1.1.:42],[notifyfd blah]” 换句话说,当我...

如何在Linux / Android 2.6.29中找到系统调用实现?

我想修改一些系统调用以进行跟踪.具体来说,无论何时打开系统调用,我都要打印一些消息. 我一直在寻找互联网和代码,我在kernel / goldfish / fs /目录中找到了open.c.此文件中有许多功能.我怎么知道确切地调用了哪个函数.我可以在所有这些函数中编写一些printk调用来查找它,但我也必须为其他系统调用执行此操作. 所以,我有几个问题, 1)查找系统调用的实现细节的最佳方法是什么? 2)我使用的是内核2.6.29(金鱼-Android).不同内核版本的...