功能完备的程序都要用到操作系统服务。即使是最简单的程序也要读取输入,生成输出,实际应用中程序的需求就更复杂了。包括检测日期和时间,使用网络,启动进程并与之通信。所谓“系统编程”,实际上就是指使用这些操作系统服务来编写程序。\r\n本书是经典Unix编程图书。详细讲述了Unix与应用程序相互作用的技术细节。包含了许多实例,涉及的主题从字符串处理到网络编程。你可以以此为起点,通过编程实践,更上一层楼。\r\n本书虽然主要针对AT&T SVR4版本,但也专门照顾到了其他三种最重要的Unix实现:Sun Solaris、HP-UX和SGI IRIX。还包括从BSD Unix向SVR4移植程序的注意事项。\r\n本书讲述的主题包括:\r\n● 使用低层I/O子例程和标准I/O库\r\n● 创建和删除目录,改变文件属性,处理多个输入流,文件和记录上锁,以及内存映像文件。\r\n● 读取、输出和设置系统时间和日期\r\n● 如何获取当前的登录用户、如何获取用户的登录和注销时间,以及如何修改程序的有效用户ID和组ID,如何写set-user-id程序\r\n● 修改各种系统限制配置参数\r\n● 创建进程、作业控制和信号处理\r\n● 使用管道、FIFO、Unix域套接字、消息队列、信号量以及共享内存进行进程间通信\r\n● 读取和设置串行线的各种属性,例如波特率、字符回显和流控制\r\n● 使用Berkeley套接字和TLI进行网络编程
作者简介\r\nDavid A. Curry目前是IBM公司Internet紧急反应服务部门(IBM-ERS)的高级Internet安全分析师,负责该部门的安全脆弱性警告服务,以及开发此服务的质量管理程序。他拥有普度大学的计算机科学学士学位。\r\nDavid自1985年开始Unix系统编程。他曾任NASA Ames研究中心的助理研究员,以及加州SRI国际公司的高级系统程序员。1991年婚后,他决定定居中西部,于是返回了普度大学,成为该大学工程计算机网的Unix系统编程组负责人,直至1995年。\r\nDavid是USENIX协会和美国国家计算机安全协会的会员。还是IBM-ERS在紧急反应和安全小组论坛(FIRST)的代表。他写过许多在网上广为流传的程序,还是另两本书《Using C on the Unix System》(O’Reilly)和《Unix System Security》(Addison-Wesley)的作者。\r\n\r\n\r\n封面介绍\r\n本书封面上的动物是狮子,一种大型的食肉猫科动物,主要栖息在西印度和撒哈拉以南。狮子是猫科动物中最喜群居的,一个狮群通常由1到4只雄狮,和30只左右的雌狮和幼狮组成。每个狮群又分成几组。狮群的领土从15到150平方英里不等,以食物的多少而定,其边界用气味划分。\r\n狮子以鲜肉和腐肉为食。它们更喜欢吃较大的猎物,比如斑马和羚羊。捕猎主要由雌狮承担,它们会互相协作,包抄较大的猎物。捕猎时,狮子会在阴暗处或植物丛中小心地移动,但风向的改变会经常使它们暴露。\r\n\r\n目录\r\n\r\n前言 1\r\n第一章 SVR4导论 13\r\n与标准兼容 14\r\n编译器 16\r\nBSD 源码兼容包 19\r\n第二章 实用子例程 22\r\n字符串操作 22\r\n内存块操作函数 42\r\n操作字符类 46\r\n动态内存分配 49\r\n操作临时文件 54\r\n分析命令行参数 57\r\n其他函数 62\r\n本章小结 65\r\n第三章 低层I/O子例程 66\r\n文件描述符 66\r\n打开和关闭文件 67\r\n输入和输出 70\r\n重置读写偏移量 74\r\n复制文件描述符 77\r\n本章小结 78\r\n第四章 标准I/O库 79\r\n数据类型和常量 81\r\n打开和关闭文件 81\r\n基于字符的输入输出 83\r\n基于行的输入输出 86\r\n基于缓冲区的输入输出 88\r\n格式化输入和输出 90\r\n重置输入/输出的偏移量 102\r\n重新分配文件指针 106\r\n缓冲 106\r\nstream的状态 108\r\n文件指针和文件描述符 109\r\n本章小结 109\r\n第五章 文件和目录 110\r\n文件系统基本概念 110\r\nUNIX 文件系统 111\r\n获得文件属性 118\r\n修改文件的属性 129\r\n创建和删除文件及目录 135\r\n与目录相关的特殊操作 137\r\n本章小结 144\r\n第六章 文件的特殊操作 145\r\n文件描述符的属性 145\r\n管理多个文件描述符 149\r\n文件和记录上锁 160\r\n内存映像文件 165\r\n文件系统/dev/fd 172\r\n其他函数 173\r\n本章小结 176\r\n第七章 日期时间操作 177\r\n复杂的时间 177\r\n获得当前的时间 179\r\n获得本地时区 180\r\n在UNIX时间格式和日常时间格式之间相互转换 182\r\n格式化数据串 183\r\n本章小结 190\r\n第八章 用户和组 191\r\n登录名 191\r\n用户的ID号 193\r\n组ID 195\r\n口令文件 196\r\n映像口令(shadow password)文件 199\r\n组文件 202\r\n文件utmp和wtmp 208\r\n文件Lastlog 217\r\n文件shells 220\r\n编写set-user-id和set-group-id程序 221\r\n本章小结 224\r\n第九章 系统配置和资源限制 225\r\n基本的系统信息 226\r\n系统资源限制 230\r\n进程的资源限制 236\r\n资源利用信息 238\r\n本章小结 241\r\n第十章 信号 242\r\n信号的基本概念 243\r\n基本的信号处理 249\r\n不可靠的信号 253\r\n可靠的信号 255\r\n信号和系统调用 260\r\n使用信号进行“定时”处理 261\r\n高级信号处理 270\r\n将伯克利的信号处理函数移植到SVR4 283\r\n本章小结 286\r\n第十一章 进程 287\r\n进程的基本概念 288\r\n终止进程 294\r\n执行一个程序 295\r\n和进程相关的高级函数调用 298\r\n输入输出重定向 314\r\n作业控制 321\r\n统计进程的执行时间 322\r\n移植注意 323\r\n本章小结 325\r\n第十二章 终端 326\r\n终端I/O的基本概念 327\r\n和终端相关的函数 333\r\nPOSIX的终端控制 335\r\nPOSIX之前的终端控制 347\r\n终端窗口的大小 354\r\n本章小结 355\r\n第十三章 进程间通信 356\r\n管道 356\r\nFIFO 366\r\nUNIX的套接字 369\r\n系统V的IPC 函数 377\r\n本章小结 391\r\n第十四章 使用套接字进行网络编程 392\r\n网络的基本概念 393\r\n创建一个套接字 399\r\n服务器端的函数 400\r\n客户端的函数 402\r\n示例程序 405\r\n其他函数 410\r\n本章小结 415\r\n第十五章 使用TLI进行网络编程 417\r\n结构体netbuf 418\r\n网络选择 419\r\n主机名-主机地址转换 424\r\nTLI工具函数 427\r\n传输终端点管理 429\r\n无连接的服务 434\r\n面向连接的服务 440\r\n其他函数 454\r\n在TLI中进行读写 457\r\n本章小结 458\r\n第十六章 其他子例程 460\r\n当发生错误时退出 460\r\n错误日志 461\r\n搜索 466\r\n排序 481\r\n环境变量 483\r\n口令 484\r\n随机数 486\r\n目录树 486\r\n数据库管理 492\r\n模式匹配 495\r\n国际化 502\r\n本章小结 507\r\n附录一 ANSI C对C的改进 509\r\n附录二 访问文件系统的数据结构 521\r\n附录三 文件系统/proc 550\r\n附录四 伪终端 562\r\n附录五 在链路层访问网络 574\r\n
无封面