当前位置: 首页 > news >正文

TLPI 第11章 练习:System Limits and Options

笔记和练习博客总目录见:开始读TLPI。

练习 11-1.

如果你有机会,尝试在其他 UNIX 实现上运行清单 11-1 中的程序。


其他UNIX,此处选择的是FreeBSD。首先参考博客VirtualBox上安装FreeBSD,创建一个FreeBSD系统。

然后参考博客在FreeBSD上编译TLPI示例代码,生成libtlpi.a静态链接库。

11-1就是syslim/t_sysconf。

$cdsyslim $ gmake $uname-aFreeBSD freebsd14.3-RELEASE FreeBSD14.3-RELEASE releng/14.3-n271432-8c9ce319fef7 GENERIC amd64 $ ./t_sysconf _SC_ARG_MAX:524288_SC_LOGIN_NAME_MAX:33_SC_OPEN_MAX:28494_SC_NGROUPS_MAX:1023_SC_PAGESIZE:4096_SC_RTSIG_MAX:62

对比以下Linux中的输出:

$uname-aLinux ol9-vagrant5.15.0-314.193.5.5.el9uek.x86_64#2 SMP Fri Nov 28 07:05:37 PST 2025 x86_64 x86_64 x86_64 GNU/Linux$cdtlpi-book/ $cdsyslim/ $ ./t_sysconf _SC_ARG_MAX:2097152_SC_LOGIN_NAME_MAX:256_SC_OPEN_MAX:1024_SC_NGROUPS_MAX:65536_SC_PAGESIZE:4096_SC_RTSIG_MAX:32

练习 11-2.

尝试在其他文件系统上运行清单 11-2 中的程序。


11-2就是syslim/t_fpathconf

其他文件系统,此处使用的是FreeBSD上的UFS。

$unameFreeBSD $df-T/ Filesystem Type 1K-blocks Used Avail Capacity Mounted on /dev/gpt/rootfs ufs5061984385127680575283% / $ ./t_fpathconf _PC_NAME_MAX:255_PC_PATH_MAX:1024ERROR[EINVAL Invalid argument]fpathconf _PC_PIPE_BUF:

对比Linux下的xfs:

$unameLinux $df-T/ Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_main-lv_root xfs3348480056635602782124017% / $ ./t_fpathconf _PC_NAME_MAX:255_PC_PATH_MAX:4096_PC_PIPE_BUF:4096

除了数值有差异,为什么FreeBSD会报错?

这是由于FreeBSD 严格遵循 POSIX 标准,_PC_PIPE_BUF 只能用于管道文件描述符,而STDIN_FILENO(标准输入)不是管道。

而Linux 对这个检查比较松,不会报错。

以下示例文件为使用 fpathconf 从管道描述符查询 _PC_PIPE_BUF:

#include<unistd.h>#include<stdio.h>#include<stdlib.h>intmain(void){intpipefd[2];longpipe_buf;// 创建一个管道,得到读/写文件描述符if(pipe(pipefd)==-1){perror("pipe failed");exit(1);}// 使用 fpathconf 从管道描述符查询 _PC_PIPE_BUF// 用读端或写端查询结果一样pipe_buf=fpathconf(pipefd[0],_PC_PIPE_BUF);if(pipe_buf==-1){perror("fpathconf failed");close(pipefd[0]);close(pipefd[1]);exit(1);}printf("FreeBSD _PC_PIPE_BUF = %ld bytes\n",pipe_buf);// 关闭描述符close(pipefd[0]);close(pipefd[1]);return0;}

在FreeBSD下运行正常:

tlpi@freebsd:~/tlpi-dist/syslim $ ./a.out FreeBSD _PC_PIPE_BUF=512bytes
http://www.jsqmd.com/news/700315/

相关文章:

  • Less如何处理CSS长文本换行_封装Mixin解决不同场景需求
  • 掌握Ahk2Exe:AutoHotkey脚本编译器的终极实践指南
  • ROS2机器人仿真新选择:5分钟在Ubuntu22.04上跑通Webots官方TurtleBot3样例
  • NBTExplorer架构深度解析:Minecraft数据编辑的技术实现与设计哲学
  • B站缓存视频合并终极指南:5分钟学会将碎片视频变完整
  • 告别数据焦虑:用YOLOv5和PyTorch玩转Few-Shot目标检测(附完整代码)
  • Flux2-Klein-9B-True-V2保姆级教程:WebUI历史记录管理与结果导出
  • 应对近视低龄化趋势 近停视界以体系化方案守护青少年眼健康 - 外贸老黄
  • 2025届学术党必备的五大降AI率平台实测分析
  • 利用公共数据控进行单细胞转录组学分析
  • 《SRE:Google 运维解密》读书笔记19: SRE中的软件工程 - 当SRE从“运维”走向“开发”
  • JOULWATT杰华特 JW1386VQDFA#TR DFN 转换器
  • 如何快速掌握PCL启动器:面向Minecraft新手的完整教程
  • 036、Python多线程编程:threading模块基础
  • Qwen3-TTS开源大模型部署:多用户并发语音合成负载测试报告
  • DeepSeek V4降AI完全手册,2026年4月从0到95分实测 - 我要发一区
  • Windows麦克风全局静音控制:MicMute的技术实现与高效应用指南
  • 儿童怎么掏耳朵?怎么给小孩掏耳屎?儿童掏耳朵神器推荐2026
  • HsMod插件:重新定义你的炉石传说游戏体验
  • MinGW-w64企业级技术架构深度解析:构建Windows生产环境部署的最佳实践
  • 如何用XUnity.AutoTranslator打破游戏语言壁垒:三步实现无缝翻译体验
  • 如何通过计算机视觉技术重新定义科研图表数据分析范式
  • 如何配置表中某列的排序权重_全文索引配置与权重分配
  • 破解近视低龄化难题 赵阳眼科以专业医疗守护青少年眼健康 - 外贸老黄
  • C++入门第一节
  • DeepSeek V4写的论文知网AI率高怎么办?2026年4月攻略 - 我要发一区
  • GitHub 9.5k Star!教你免费使用 Claude Code,终端 VSCode 皆可用
  • 在测试过程中,如何定位一个问题出现的原因
  • 5分钟掌握抖音下载器:新手必备的无水印批量下载完整指南
  • FlightSpy:如何用开源工具实现全天候机票价格智能监控?