最近,我一直在大量阅读有关glibc函数如何在Linux中包装系统调用的信息。但是,我想知道glibc和GNU C编译器之间的关系。
比方说,例如,我想编写自己的C Standard实现并编写一个名为“ newglibc”的新库,而我只需稍作更改即可。例如,在系统调用之前和之后,我都会进行更多检查和采取措施。我需要编写一个新的编译器吗?还是可以使用相同的GNU gcc编译器?
如果编译器与库完全分开,那么有人能够理论上在Windows系统上使用gcc,如果他们可以将其转换为.exe并提供Windows提供的标准C库呢?
谢谢
我一直在阅读系统调用及其在Linux中的工作方式.我仍然有更多的阅读要做,但有一件事,我已经读过的没有回答的是,为什么我们需要系统调用?
我知道系统调用是来自用户空间程序的请求,内核要做一些事情,但我的问题基本上是:为什么用户空间程序不能自己做呢?为什么Glibc不执行实际操作而不仅仅是作为系统调用的包装器?
例如,如果我调用fopen()我的程序,为什么glibc会调用open系统调用?为什么glibc本身不进行操作?
我明白这意味着glibc开发人员会有更多的工作,他们必须对Linux有一个深入的了解,但是glibc与Linux内核的关系是否已经非常密切了?
另外,我知道系统调用函数在CPU的0环上运行......但是真正重点是什么呢?如果我执行一个程序,我给它明确的运行权限,那么通过分离哪些代码可以在不同的上下文中运行来添加什么安全性,因为你还是给了它所有权限?
有多种语言具有其编译器/库的参考实现,但为什么C没有参考实现?
我知道GCC和glibc被广泛使用,微软有他们也使用的版本,但为什么不是一个主要的实现,例如python?(是的,我知道还有其他实现,但有一个MAIN/Reference python)是
不是与Linux和Windows等操作系统在C中实现至少部分API的事实有关吗?谢谢.