【linux读取sys调用不会得到EOF】教程文章相关的互联网学习教程文章

Unix / Linux系统是否调用POSIX库函数的一部分?

Unix / Linux系统是全部调用还是主要调用POSIX? 许多Linux / Unix编程书籍都说POSIX库函数可能是OS系统调用的包装,也可能不是.例如. http://www.makelinux.net/books/lkd2/ch05lev1sec1和https://www.safaribooksonline.com/library/view/understanding-the-linux/0596005652/ch10s01.html POSIX的一部分(称为Single UNIX Specification)定义了UNIX.因此我认为POSIX定义了Unix(和Linux)的系统调用. 那么Unix / Linux系统调用POSIX...

如何将int / char传递给system()一个Linux系统调用【代码】

好吧,它可能听起来很愚蠢,但我无法想出一种方法将int / char传递给这个系统调用 这是我希望它如何工作system ("cal %d %d", month, year);我希望这会在终端“cal 3 2009”上给我以下命令 终端将向我显示2009年3月的日历. 但编译器抱怨它有太多的论点 有任何想法吗?我需要让这个方法系统(“cal”)给我一个动态日历. 注意:cal取参数cal月份年份解决方法:您需要构建正确的命令行字符串,system()不会为您执行此操作:char cmd[64];sn...

如何在linux中使用execv系统调用?【代码】

我正在编写一个程序,使用execl来执行我的exe文件,该文件正在测试并且它的工作非常好,并在Linux CLI中显示输出.但我不知道如何将execl更改为execv,虽然我知道两个系统调用都会给出相同的值.我对execv系统调用的数组参数感到困惑 这是我的execl示例程序int main(void) {int childpid;if((childpid = fork()) == -1 ) {perror("can't fork");exit(1); }else if(childpid == 0) {execl("./testing","","",(char *)0);exit(0); } else {...

linux – 我可以在调用fork之前覆盖系统函数吗?

我希望能够从我启动的任何子进程中截取具有特定前缀的文件名.这将是“pipe:// pipe_name”之类的名称.我认为包装open()系统调用对我的应用程序来说是一个很好的方法,但是我想这样做而不必编译一个单独的共享库并用LD_PRELOAD技巧(或者使用FUSE和有一个安装目录) 我将自己分配进程,有没有办法在分叉之前将open()重定向到我自己的函数,并在exec()之后将它保留在子进程中? 编辑:这背后的想法是我想通过中间进程tee()将数据从一个管...

linux – 添加通常对非root用户不可用的“有用”系统调用

我已经实现了一个功能有限的简单Hello World系统调用 – 它只是从用户模式转换到内核模式,打印一条用内核消息记录的消息,然后转换回用户模式. 额外功劳的下一步是添加一个非root用户通常无法使用的有用(新)系统调用. 系统调用可以很简单,但是我很难想出任何想法……有人能指出我正确的方向还是想要轻松实现的东西? (我们给出的提示是使用新的系统调用进行调试!)解决方法:内核结构中有大量关于进程的信息:页面位置,内存统计信息,...

linux – seccomp-bpf如何过滤系统调用?【代码】

我正在调查seccomp-bpf的实现细节,这是自3.5版以来引入Linux的系统调用过滤机制.我查看了Linux 3.10中kernel / seccomp.c的源代码,并想询问一些有关它的问题. 从seccomp.c开始,似乎从__secure_computing()调用seccomp_run_filters()来测试当前进程调用的系统调用.但是查看seccomp_run_filters(),作为参数传递的系统调用号不会在任何地方使用. 似乎sk_run_filter()是BPF过滤器机器的实现,但是从seccomp_run_filters()调用sk_run_fil...

linux – 是否有必要在softirq上下文中调用rcu_read_lock

rcu_read_lock的实现是禁用抢占和屏障.并且softirq上下文不会被抢占.所以有必要在softirq上下文中调用rcu_read_lock.障碍重要吗?解决方法:是的,有必要使用rcu_read_lock来访问受rcu保护的指针,即使在softirq上下文中也是如此. 正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得即使您没有使用rcu_read_lock分隔rcu读取端关键部分也不存在损坏风险.但是,这不是rcu api的保证,只是因为具体实施而“破解”.这个...

Linux RPC调用很慢【代码】

以下RPC程序在Fedora上执行速度非常慢.如果我在llist.x中将名称缓冲区的大小从999个字符更改为512,那么它的工作速度很快.我不知道为什么.如果有人知道原因,请告诉我! 注意:请编译以下程序并执行服务器然后执行客户端.(对我来说,30个循环需要3秒钟.) llist.c#include "llist.h" #define PRINT_TIME (!gettimeofday(&tv, NULL) && printf(" %lf",tv.tv_sec+(tv.tv_usec/1000000.0)))struct timeval tv;int main(int argc, char *a...

使用Linux中的“直接渲染管理器”在dumbbuffer上调用mmap在使用C时失败【代码】

有一段时间,我一直在使用Linux‘Direct Rendering Manager,这允许我们进行一些非常低级别的图形管理.这通常在C中完成,在libdrm的帮助下,或直接使用DRM headers. 我正在尝试在Rust中创建一个与libdrm等效的东西,它不仅仅是对C库的绑定,而是直接使用系统调用.这不是一项容易的任务,因为那里几乎没有DRM的文档,但我正在关注this example in C以获取从哪里开始的提示. 我现在到了我应该创建一个哑缓冲区并将其映射到内存中的点,所以我可...

linux – 使用waitid系统调用在程序集中等待克隆的子进程【代码】

我正在尝试等待我克隆的过程.但是,当父进程使syscall等待时,我在使用strace时得到-1 ECHILD.尽管克隆调用返回了创建的子节点的PID,如下所示:clone(child_stack=0x7ffe2b412d10, flags=CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWPID) = 3735 waitid(P_PID, 3735, NULL, WEXITED, NULL) = -1 ECHILD (No child processes)如果我创建一个重复调用waitid的循环,它最终会给出等待孩子的预期结果.这让我相信,有一些竞争条件,孩子...

Linux timerfd,每隔x秒调用一次函数,不会阻塞代码执行【代码】

需要每X(例如5)秒调用一个函数,下面的代码就是这样做的.但它阻止了代码的执行.因为我希望它像setitimer一样工作,我可以说每5秒调用一次函数并做其他事情.谢谢#include <sys/timerfd.h>#include <time.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <stdint.h> /* Definition of uint64_t */#define handle_error(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)intmain(int arg...

在linux内核中,是否会调用kfree?

标题几乎就是问题…… 我正在编写一些使用自旋锁来帮助列表管理的代码.关于自旋锁的文档很清楚,没有调用任何会睡觉的东西.我知道有办法分配“原子”的内存,但我还没有看到任何关于kfree或释放内存的东西. 直觉告诉我它不应该睡觉,但我没有发现这是明确的.解决方法:不,它永远不会睡觉.从任意上下文调用kfree是安全的.唯一的例外是NMI oopser和类似的arch代码.

如何在发送大量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上HTTP POST调用的延迟【代码】

用例 我正在研究企业级支付应用程序(用JAVA编写).我希望模拟对银行进行的HTTP POST调用的延迟.这将允许我模拟可能发生的不同延迟/不可用场景. 代码 以下代码将请求发送给银行:try {// Set the location of the Bank Of America payment gatewayURL url = new URL(getParameterGatewayUrl());// Open the connectionurlConnection = url.openConnection();// Set the connection timeouturlConnection.setConnectTimeout(getTimeou...