【生成调用流程图的工具[C C solaris linux]】教程文章相关的互联网学习教程文章

Linux中writev()系统调用的原子性

我查看了Linux内核4.4.0-57-generic的内核源代码,在writev()源代码中没有看到任何锁定.有什么我想念的吗?我看不到writev()是原子还是线程安全的.解决方法:这里不是内核专家,但是无论如何我都会分享我的观点.随时发现任何错误. 浏览内核(虽然我不希望v4.9如此不同),并尝试跟踪writev(2)系统调用,但我可以观察到随后创建以下路径的函数调用: > SYSCALL_DEFINE3(writev, ..)> do_writev(..)> vfs_writev(..)> do_readv_writev(..) 现...

在Linux上的哪个库中,系统调用以及该库如何链接到包含系统调用的可执行对象文件?

我知道系统调用不在C标准库中.是否有系统调用所在的库(某种系统库)? 如果有这样的库,该库如何链接到可执行程序?解决方法:根据目标体系结构,系统调用可以几种不同的方式工作,但无论如何,它不是库调用.这是正在运行的用户空间程序调用内核中某些功能的一种方式. 在非常老的系统中,这通常意味着直接跳转到该内核功能开始的某个地址.后来,内核引入了“跳转表”,从而增加了一个间接层,因此在更改内核时不必更改地址.这种简单的方法很长...

linux-用x87 float调用printf【代码】

我在x86 asm中有一个简单的程序,它使z = x / y.关键是,除法时应正确编写代码,但不打印任何内容.没有输出.我不知道出什么问题了,因为当程序不使用eax,ebx等时,我无法调试.global main extern printfsection .textmain:finitfild dword[x]fild dword[y]fdivfist dword[z]push dword[z]push frmcall printfadd esp,8mov ebx,0mov eax,1int 0x80section .data x: dd 1.2 y: dd 3.14 z: dd 0.0 frm: dd '%lf',10,0解决方法:1)C库-我猜您...

linux-系统调用如何知道包装函数将参数放入何处?

我正在尝试在Linux(RedHat Enterprise 8)中实施syscall,我对其工作方式有些困惑.据我了解,我在用户模式下实现了一个包装器,该包装器将syscall编号放入eax,将参数放在ebx,ecx,edx等中,然后调用int 0x80,后者调用相应的syscall.我的问题是,由于系统调用是像常规C函数一样编写的,因此它如何知道哪些寄存器包含哪些参数?它是一个约定,还是有一个约定的机制?如果存在,它在哪里以及如何执行? 编辑:这是一项家庭作业.我知道有些syscal...

在没有堆栈的情况下在Linux上进行系统调用【代码】

在Linux i386上,使用int $0x80 syscall ABI可以很容易地在没有有效用户空间堆栈的情况下执行syscall.另一方面,vdso / vsyscall接口需要访问堆栈.在这方面,其他Linux端口(特别是x86_64)如何?他们有没有堆栈的方式进行系统调用的方法吗?是否有关于每个架构的可用syscall方法的参考?解决方法:一般来说:不知道.即使在i386上,如果有第6个参数,它也必须在堆栈上传递(例如mmap). 专门针对x86_64:将系统调用号放入%rax(请注意:系统调...

c-在Linux中调用socket.close之后,socket.read_some需要相当长的时间才能返回【代码】

我使用Boost.Asio作为简单的套接字库. 当我打开一个套接字时,我创建了一个继续读取该套接字的线程,并在该套接字关闭或发生其他错误时返回.while((read = socket->read_some(buf, ec)) != 0) {// deal with bytes read }此代码在Windows和Mac上运行良好.但是对于linux,当从主线程关闭套接字时,socket :: read_some返回会花费很长时间-我发现它超过了2分钟. 有什么我可以做来改善的吗?解决方法:如果需要cancel-ability,请使用异步套...

linux-有没有办法从make调用中获取-j参数?【代码】

可以说我打电话给:make -j 5在我的Makefile中有没有办法获取-j参数? 我的目标是从Makefile中调用scons,以保持使用多个作业来加快编译速度的能力. 就像是:# The Makefile all:scons -j ${GET_J_PARAMETER}谢谢. 脚注:我知道我最好直接调用scons,但是我工作的一些开发人员已经输入make已有近十年了,他们似乎不可能输入任何其他内容来构建他们的库…解决方法:我认为MAKEFLAGS包含该信息. 在此处了解更多信息GNU Make 第7.3节说明了...

c-在不接受Linux的情况下调用监听套接字连接【代码】

我在Ubuntu Linux上运行代码,应该使用Set并选择以检查侦听套接字何时有活动(即有人尝试连接)并让他们连接,麻烦的是选择ALLWAYS返回0,而当我尝试连接时它只是直接连接.但是在服务器上从未调用Accept,因为select总是返回0,所以我想知道是什么原因引起的?namespace SocketLib {const int MAX = FD_SETSIZE;class SocketSet { public:SocketSet();void AddSocket( const Socket& p_sock );void RemoveSocket( const Socket& p_sock );...

Linux系统调用返回值【代码】

在一项家庭作业中,我们被要求向Linux内核(Red Hat 2.4.18)添加系统调用.根据分配,新系统调用的返回值应为空.系统调用本身非常简单(只需分配一个),就不会出错.根据我的学习和学习,系统调用通常返回负值以指示失败,或者返回0指示成功.我的问题是,这只是一种普遍的做法还是必须的?系统调用可以返回void吗?解决方法:在Linux中,如果所有系统调用都返回,则它们返回的时间很长.假设您使用以下方法声明系统调用:SYSCALL_DEFINE0(mycall)...

在Linux上实现Python调用C语言函数【代码】

一般思路 Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用。 假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y). 将.c文件编译成 .so文件gcc -fPIC -shared test.c -o test.so运行后会看到有test.so文件生成。 在Python中导入C文件 在当前目录下打开Python import os from ctypes import *p = os.getcwd() + '/test.so’ #表示.so文件的绝对路径,如果你没在当前路径打开python则可能需要修改 f = ...

未调用Linux DevFreq驱动程序中的探测【代码】

我正在尝试为Linux上的外围设备设置devfreq驱动程序.我对驱动程序的初始化方法如下:static struct platform_driver zynq_csortfreq_driver = {.probe = zynq_csortfreq_probe,.driver = {.name = "ZYNQ_CSORT_DEVFREQ",.owner = THIS_MODULE,},};static int __init zynq_csortfreq_init(void) {return platform_driver_register(&zynq_csortfreq_driver); } late_initcall(zynq_csortfreq_init);但是,驱动程序中的探测函数(zy...

系统调用以在c(linux)中绘制点

我是Linux系统调用的新手,我的问题是我们在Linux中有一个系统调用可以在屏幕上绘制点吗?我用Google搜索了它,但找不到任何简单的解释.我想在Linux中编写一个简单的C程序,无需C图形库即可直接在屏幕上绘制一个点. 如果没有这样的系统调用,如何创建自己的系统调用以在屏幕上绘制绘图点?解决方法:在Linux上,最低级别的独立于硬件的图形接口是framebuffer.可通过写入设备节点(通常为/ dev / fb0)来进行操作,这等效于系统调用,因为它是...

linux-为什么使用两个参数(struct inode *,struct file *)进行打开调用?【代码】

我正在实现一个字符驱动程序.所以我正在注册文件操作.当我注册读取功能时,我以此方式提取了次要号码myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset){int minor;minor = MINOR(file->f_path.dentry->d_inode->f_pos->i_rdev);.......此规则也适用于公开通话.myopen(struct inode * inode, struct file * file)struct文件定义具有对struct inode的引用.因此,一个参数足以进行公开通话. 我的问题是: >...

Linux内核中的TCP调用流程

我试图在Linux内核中获得3.8版本的TCP调用流,以用于不同的用户空间API(例如,connect,bind,listen和accept).谁能给我提供流程流程图?我能够使用send和recv API查找数据流. 另一个问题,当客户端连接到服务器时,服务器为该客户端创建一个新的套接字,用于由接受API返回的特定连接.我的问题是,Linux内核是否在某些哈希绑定表中维护侦听套接字与从其派生的套接字之间的任何关系?解决方法:第一个问题: http://www.danzig.jct.ac.il/tcp...

linux-在不等待系统调用返回的情况下结束perl脚本【代码】

我正在Linux(Ubuntu 14.04)上运行一个简单的apache Web服务器,并使用perl CGI脚本处理一些请求.该脚本使用系统功能启动系统命令,但是我希望它立即返回,而不管系统调用的结果如何. 我一直在传递给系统的标量参数的末尾添加“&”号(我知道命令注入攻击的含义),尽管这确实会导致系统命令立即返回,但脚本直到下层脚本仍不会退出命令已完成. 如果我使用来自perl CGI的系统调用以10秒钟的睡眠时间触发了一个虚拟的ruby脚本,那么我对Web服...