c - 返回状态/值的适当范围

2023-12-31

最近在看一本关于linux编程的书时,得到这样的信息:

_exit() 的 status 参数定义了进程的终止状态,当该进程的父进程调用 wait() 时,该状态可用。尽管定义为 int,但实际上只有状态的底部 8 位可供父级使用。并且只有0 ~ 127建议使用,因为 128 ~ 255 可能会由于某种原因在 shell 中造成混淆。因为那个-1会变成2552 的补码。

以上是关于子进程的退出状态。

我的问题是:

  • 为什么父进程只能获取子进程退出状态的8位?
  • 普通函数的返回值呢?仅使用是否合理或有益0 ~ 127?因为我确实使用-1有时作为返回值来指示错误,我应该在将来纠正它吗?

更新 - 通过 wait() / waitpid() 获取状态:

我在书(TLPI)中阅读了更多的 chps,发现返回状态和 wait()/waitpid() 中有更多值得一提的技巧,我应该在提出问题之前阅读更多的 chps。无论如何,我自己添加了一个答案来描述它,以防将来对某人有所帮助。


为什么父进程只能获取子进程退出状态的8位?

因为 POSIXsays so http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html。 POSIX 之所以这么说,是因为这就是原始 Unix 的工作方式,并且许多从它派生并模仿它的操作系统都继续工作。

普通函数的返回值呢?

他们是不相关的。合理的就退货。-1与任何其他值一样好,实际上是在大量标准 C 和 POSIX API 中指示错误的标准方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c - 返回状态/值的适当范围 的相关文章

随机推荐

  • f2py 的附加编译器标志

    我想使用旗帜 ftree vectorize 编译器手册 https gcc gnu org projects tree ssa vectorization html 作为 f2py 使用的 gnu fortran 编译器的附加参数 根据f
  • 测试连接内解析 DnsName

    我想知道如何退回Resolve DnsName我的输出Test Connection脚本并将其添加到我创建的 CSV 中 我喜欢从中捕获名称 类型 TTL 部分 仅调用Resolve DnsName当 ping 不成功时 servers G
  • 在Java中,两个字符相加的结果是int还是char?

    添加时 a b 它产生 195 是输出数据类型char or int 添加 Java 字符 短整型或字节的结果是int 关于二进制数字提升的 Java 语言规范 http docs oracle com javase specs jls s
  • 在 Java 中反序列化序列化的 php 对象

    有谁知道是否有可能 实际上是否已经完成 在 php 中序列化对象并在 Java 中反序列化 java php 通信 也许需要一个适配器 你怎么认为 Thanks 有serialized php parser http code google
  • 使用 Jinja2 对 JavaScript 进行转义字符串?

    如何使用 Jinja2 转义 HTML 以便它可以用作 JavaScript jQuery 中的字符串 如果我使用 Django 的模板系统 我可以这样写 mydiv append html string escapejs 姜戈的 esca
  • 减去双打时的奇怪结果[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 C 中的浮点运算不精确 https stackoverflow com questions 753948 why is floating point arithmetic in c impre
  • Matplotlib:重新排序子图

    Say that I have a figure fig which contains two subplots as in the example from the documentation http matplotlib org ex
  • 为什么 nuget 要安装一堆系统命名空间引用?

    我正在尝试从 nuget 安装一个库 我原本期望可能有 3 或 4 个不同的依赖项 但它安装了一大堆System依赖关系 这是日志 Attempting to gather dependency information for packag
  • Android Studio 2.3.3 首次运行时卡住

    我下载了安卓工作室2 3 3 https developer android com studio index html for Linux并将内容解压到 usr local then cd android studio bin 编辑了文件
  • 当我从 MainLayout 停止代码时,防止代码在我的页面上运行

    我有一个带有 MainLayout 的 Blazor PWA 应用程序和一堆页面 每当用户未登录时 我想将他们重定向到登录屏幕 如果我可以将它们从 MainLayout 重定向到登录屏幕 我已经知道用户尚未登录 那就太好了 我只是检查 co
  • 房间失效跟踪器初始化两次

    我有一个水平回收器视图 其中包含自定义项目 每个项目都可以保留当前项目在回收器视图中的位置 我想在使用拖放移动项目时更新项目位置 但是 当水平视图中的项目超过三个时 数据将被删除 请帮助我 源代码 https github com parm
  • 使用 Parse 和 PubNub 的 Android 聊天应用程序指南

    我正在尝试创建一个简单的 Android 聊天应用程序 用户可以在其中注册并拥有好友列表来开始对话 我打算使用Parse https parse com 对于数据库后端和PubNub http www pubnub com 对于实际的聊天频
  • 如何使用 AWS Amplify 和 Next.js 创建生产环境变量

    我有一个 API 密钥 需要它来访问 API 端点 在我的 Next js 应用程序中 我将此密钥存储在 env local像这样 API KEY qwerty123 我在我的getStaticProps与 process env 一起使用
  • Gcm电话注册错误

    我正在尝试设置一个应用程序来与 gcm 一起使用 但每次我收到phone registration error 错误 根据 Gcm 文档 此错误意味着 Incorrect phone registration with Google Thi
  • 如何将变量传递给使用 gcc 编译的 intel 格式内联 asm 代码

    我想向您寻求一些帮助 我有一个包含大量 C 源代码的项目 大多数是用gcc编译的 但也有一些是用Intel编译器编译的 后面的代码在微软有很多内联asm代码MASM格式 我想用 gcc 编译整个项目并修改尽可能少的代码 所以我编写了一个 p
  • 无法解析新 Android Studio 项目上的符号 GooglePlayServicesClient

    我刚刚安装了 Android Studio 1 1 0 并创建了一个新项目 我使用包括 Google 登录在内的登录活动创建了它 项目一打开 我就看到很多错误PlusBaseActivity java 这些似乎源于这样一个事实 com go
  • iOS7:UITapGestureRecognizer 重用问题

    我设置了三个按钮 每个按钮都标记为 1 3 我的 UITapGestureRecognizer 仅工作一次 并且仅适用于第一个 UIButton 无法选择其他两个选项 代码 void viewDidLoad super viewDidLoa
  • 从另一个列表中获取项目的边界

    我有一个清单 就像 tlist 0 0 0 07 0 13 0 15 0 2 0 22 which is sorted 我还有另一个清单 newlist 0 0 0 04 0 08 0 12 0 16 0 2 numbers with a
  • 如何使用加密密码连接到 PostgreSQL 服务器

    在通常的情况下 连接字符串包含纯文本的密码 但这可以被Wireshark捕获 所以我想在连接字符串中使用加密的密码 我从 Postgres 文档中找到了以下摘录 通过网络加密密码MD5认证方式 在将密码发送到客户端之前 在客户端对密码进行双
  • c - 返回状态/值的适当范围

    最近在看一本关于linux编程的书时 得到这样的信息 exit 的 status 参数定义了进程的终止状态 当该进程的父进程调用 wait 时 该状态可用 尽管定义为 int 但实际上只有状态的底部 8 位可供父级使用 并且只有0 127建