首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell-kernel交互

Shell-kernel交互
EN

Stack Overflow用户
提问于 2011-12-16 12:54:19
回答 4查看 847关注 0票数 1

我正在尝试用C和/或C++为Linux编写一个shell。我应该使用哪些函数来与内核交互?有人说使用system(),但我认为它调用外壳,这将导致无限递归。其他人说了些关于fork()exec()的事。

显然,一个好的shell需要某种方式来访问文件系统。我假设内核为此提供了某种接口,不是吗?如何读取内核的输出?它是文本还是整数?

有没有地方可以找到关于必要功能的好文档?是否有我应该阅读的特定手册页或源代码文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-16 12:59:48

内核为低级进程执行和文件系统访问提供了一组“系统调用”。流程执行通常使用fork()exec() family calls之一来完成。I/O可以通过诸如open()stat()opendir()等调用来完成。

大多数可移植性更强的调用(包括C库调用和系统调用)的列表可以在Open Group Base Specification中找到(单击“系统接口”)。也有一些特定于linux的版本--那些打算用于普通用途的版本将在手册页(ls /usr/share/doc/man/man2man 2 somefunction)的第2部分进行说明。

票数 5
EN

Stack Overflow用户

发布于 2011-12-16 13:04:24

操作系统教科书是一个很好的起点。我推荐Silberschatz等人的"dinosaur book“。另一个很好的资源是Dave Hollinger教授在RPI的操作系统课程的课程页面。讲座幻灯片在网上,其中包括一堂关于编写shell的讲座。还有一个关于编写一个基本shell的家庭作业,你可以查看。

http://cgi2.cs.rpi.edu/~hollingd/opsys/opsys.php

shell是一个非常复杂的程序,不能用StackOverflow回答来描述。但是,这些资源应该会为您指明正确的方向。

票数 3
EN

Stack Overflow用户

发布于 2011-12-16 15:23:07

linux kernel可以理解的system calls列表记录在syscalls(2)手册页中。

一个shell通常不会连接到所有的接口。shell通常最关心的是影响它可以运行的进程的系统调用。例如,shell通常不需要(自己)调用mmapmprotect syscall(即使malloc的实现可能调用mmap)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8529937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档