gpt4 book ai didi

c - 在 Linux 中创建子进程时的 unistd.h 或 stdlib.h

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:14 26 4
gpt4 key购买 nike

我想知道头文件 unistd.h 和 stdlib.h 在创建子进程和通过管道建立通信时有什么区别...

我们在这些情况下使用的系统调用函数是,read()write()wait()pipe()fork()exit()。而且似乎库 stdlib.h 也有它们,为什么 stackoverflow 或其他站点中的所有示例都包含这两个 header ?

演示:

打开控制台并编写nano program.c,粘贴以下代码。然后用gcc program.c -o program编译它,你会得到pid:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int pid;
pid = fork();
printf("EL pid %i\n", pid);
}

最佳答案

函数exit()在 C 标准中定义,其声明指定属于 <stdlib.h> .

open() , read() , fork() , pipe()等是 C 标准未涵盖的 Posix 系统调用。 Posix 指定它们中的大多数应该在 <unistd.h> 中声明(虽然 open() 来自 <fcntl.h> 而不是)。

一些较旧的系统过去常常混合或复制这些声明,但现代环境不再这样做,以符合这些标准。

请注意,原始 C 标准允许编译器猜测未知函数原型(prototype); C99 和 C11 没有。您的示例代码将使用合适的编译器进行编译并产生正确的输出,因为所使用的系统调用具有非常基本的 API。使用 -Wall -Werror -std=c99 编译相同的代码应该无法生成可执行文件。

以这种方式编程被认为是草率的,不再受支持。 C 有足够的陷阱,因为它不再容忍这种风格。 Stack Overflow 上的人们大部分时间都坚持编写正确的代码,因此包含正确的 header 。

关于c - 在 Linux 中创建子进程时的 unistd.h 或 stdlib.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com