Questions tagged «system-calls»


2
Linux reboot()系统调用的幻数
Linux编程接口在第3章中将进行如下练习: 当使用特定于Linux的reboot()系统调用来重新引导系统时,必须将第二个参数magic2指定为一组幻数(例如LINUX_REBOOT_MAGIC2)之一。这些数字的意义是什么?(将它们转换为十六进制提供了一个线索。) 手册页告诉我们magic2可以是LINUX_REBOOT_MAGIC2(672274793),LINUX_REBOOT_MAGIC2A(85072278),LINUX_REBOOT_MAGIC2B(369367448)或LINUX_REBOOT_MAGIC2C(537993216)之一。我无法用十六进制解释它们的含义。我还查看了/usr/include/linux/reboot.h,也没有给出任何有用的评论。 然后,我在内核的源代码中搜索sys_reboot的定义。我发现的只是一个头文件中的声明。 因此,我的第一个问题是,这些数字的意义是什么?我的第二个问题是sys_reboot的定义在哪里,以及如何找到它的? 编辑:我在中找到了定义kernel/sys.c。我只为rep sys_reboot,而忘记了magic编号的grep。我认为定义必须隐藏在一些宏技巧的后面,因此我查看了下面的System.map文件/boot,并在旁边找到了该文件ctrl_alt_del。然后我为该符号摸索了一下,这使我找到了正确的文件。如果我是从源代码编译内核的,则可以尝试找到定义该符号的目标文件,然后从那里去。

5
如何编写信号处理程序以捕捉SIGSEGV?
我想编写一个信号处理程序来捕捉SIGSEGV。我保护一块内存以供使用 char *buffer; char *p; char a; int pagesize = 4096; mprotect(buffer,pagesize,PROT_NONE) 这样可以保护从缓冲区开始的内存的页面大小字节免受任何读取或写入的影响。 其次,我尝试读取内存: p = buffer; a = *p 这将生成一个SIGSEGV,并且将调用我的处理程序。到现在为止还挺好。我的问题是,调用处理程序后,我想通过以下方式更改内存的访问写入: mprotect(buffer,pagesize,PROT_READ); 并继续正常运行我的代码。我不想退出该功能。在将来对同一内存进行写操作时,我想再次捕获该信号并修改写权限,然后记录该事件。 这是代码: #include <signal.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <errno.h> #include <sys/mman.h> #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) char *buffer; int flag=0; …

1
为什么连续写入会在缓冲区中保留4K字节?
我基本上有以下代码: int fileWrite(int file, void * pBuffer, size_t size) { size_t bytesWritten = (size_t)write( file, pBuffer, size ) ; if (bytesWritten != size) { return -1; } return 0; } 如果大小为1GB,则可以使用,但是当大小为〜2GB时,则可以连续保留4K字节。我可以通过将写操作包装在循环中并向上移动缓冲区来解决此问题,但是我很好奇为什么它总是失败。 例如,如果大小为2147483648,则只写2147479552,而使4096不写。为什么会发生这种情况,并且总是将写操作包装在循环中是否正确?
30 c  linux  system-calls 

1
防止进程在Linux上打开新的文件描述符,但允许通过套接字接收文件描述符
我目前在一个项目中,我有一个父进程来设置套接字对,派生然后使用此套接字对进行通信。子级如果要打开文件(或任何其他基于文件描述符的资源),应始终转到父级,请求资源并fd通过套接字对获取发送。此外,我想防止孩子自己打开任何文件描述符。 我偶然发现setrlimit哪个成功阻止了子进程打开新的文件描述符,但是这似乎也使通过初始套接字连接发送的任何文件描述符无效。Linux上是否有任何方法允许单个进程打开任何文件,将其文件描述符发送给其他进程并允许他们使用它们,而又不允许这些其他进程自己打开任何文件描述符? 对于我的用例,可以是任何内核配置,系统调用等,只要可以在fork之后应用,并且可以应用于所有文件描述符(不仅是文件,还可以是套接字,套接字对等)。
9 c  linux  system-calls 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.