popen/pclose 的阻塞问题

broadenist 2006-07-06 11:12:36
pclose()
功能:关闭到一个进程的管道.
语法:#include <stdio.h>
int pclose(strm)
FILE *strm;
说明:本系统调用用于关闭由popen()打开的管道,并会等待由popen()
激活的命令执行结束后,关闭管道后读取命令返回码.
返回值:若关闭的文件描述符不是由popen()打开的,则返回-1.
=====================================================================
根据以上描述,我认为:pclose相当于一个阻塞,如果popen打开的命令行不完成并返回,那么pclose应该保持阻塞。
一下是我的测试代码:
/////////////////////////////////////////////
//g++ test.cpp -o test
#include <iostream>

using namespace std;

int main()
{
cout<<"[4--popen]sleeping in the popen..."<<endl;
sleep(30);
return 0;
}//end test.cpp
////////////////////////////////////////
//g++ main.cpp -lpthread -o main

#include <pthread.h>
#include <errno.h>
#include <iostream>
using namespace std;

pthread_t pht;
int phi;

void* pthreadproc( void* arg )
{
FILE* fp;
int num;
int pc;
cout<<"[2--thread]popen begin!!"<<endl;
fp = popen( "./test", "r" );
cout<<"[3--thread]waiting for popen return and pclose...."<<endl;
pc = pclose( fp );
cout<<"[5--thread]pclosed:%d"<<pc<<"ERROR"<<strerror(errno)<<endl;
}

int main()
{
for( int i = 0; i<1000; i++ )
{
cout<<"[1--main]thread begin"<<endl;
phi = pthread_create( &pht, NULL, pthreadproc, NULL );
if ( phi != 0 )
{
cout<<"[2--main]thread create failed!ERROR CODE:%s"
<<strerror(errno)
<<endl;
}
cout<<"[2--main]waiting for thread return......."<<endl;
phi = pthread_join( pht, NULL );
if ( phi != 0 )
{
cout<<"[6--main]thread create failed!ERROR CODE:%s"
<<strerror(errno)
<<endl;
}
else
cout<<"[6--main]thread returned"<<endl;
}
}//end main.cpp

期望的输出结果:1->2->2->3....waiting30s....->5->6
但是实际测试结果中:123456的顺序是不变,但是中间的30秒等待就不一定,证明pclose没有等待popen打开的test返回就放弃阻塞让线程返回了?

那位高手给点拨点拨呀,郁闷ing....
...全文
2183 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linaxing 2006-07-07
  • 打赏
  • 举报
回复
把多线程改成多进程试一试,pclose没有等待很可能是由于线程库造成的,隐隐约约记得linuxthread有过这样的一个bug。
broadenist 2006-07-07
  • 打赏
  • 举报
回复
sleep也正常,我连续运行,终于抱错了,pclose的strerror是打开文件件过多,监控进程,发现有多个test在同时sleep,就是说我的pclose没有等待外部进程test返回就执行并返回了,或者是他没有close掉那个管道?跪求啊,那位用过popen啊?
broadenist 2006-07-06
  • 打赏
  • 举报
回复
pclose正常返回0,不是被中断,而是没有等待popen所开启的进程管道返回,pclose提前返回了而没有阻塞
linaxing 2006-07-06
  • 打赏
  • 举报
回复
pclose()的返回值是多少?是不是被中断了?
linaxing 2006-07-06
  • 打赏
  • 举报
回复
还有一种情况,就是sleep()被中断了。pclose()返回为零说明等待的程序已经退出了。
打印一下sleep()的返回值看一下。
broadenist 2006-07-06
  • 打赏
  • 举报
回复
没有人啦?跪求吧
目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数 79 4.21 读目录 80 4.22 chdir, fchdir和getcwd函数 84 4.23 特殊设备文件 86 4.24 sync和fsync函数 87 4.25 文件存取许可权位小结 88 4.26 小结 89 习题 89 第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.6.1 输入函数 96 5.6.2 输出函数 97 5.7 每次一行I/O 98 5.8 标准I/O的效率 99 5.9 二进制I/O 100 5.10 定位流 102 5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令文件 110 6.3 阴影口令 112 6.
本书通过55个精彩的实例,全面剖析了在Linux下编写网络应用程序的方法,并阐述了网络协议架构和开发规范。为了适应不同读者的需要,本书从最基本的Linux系统操作到网络技术的基本理念,逐步深入至Linux/UNIX下具体的编程实践,结合大量具体实例和编程经验,为读者展现Linux平台下网络编程的魅力。 全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。本书最后还汇集了很多网络编程的具体实例,读者可以模仿书中的范例来开发自己的应用程序。 本书内容丰富结构清晰,实例典型,文字简洁流畅,边讲边练。不但是Linux应用与开发的从业人员的指导书,而且也可作为大专院校相关专业师生教学与自学的参考书以及社会初、中级培训班教材。 基础篇 第1章 linux平台环境简单回顾 1.1 文件系统及其操作 1.1.1 文件系统结构 1.1.2 文件i/o操作 1.1.3 文件、目录及操作 1.2 标推输入输出 1.2.1 流和buffer 1.2.2 i/o类型 1.3 进程概念及控制 1.3.1 进程的运行和终止 1.3.2 进程间竞争 1.3.3 wait操作 1.4 信号 1.4.1 信号屏蔽字 1.4.2 相关操作 1.5 本章小结 第2章 进程间通信 2.1 管道和fif0 2.1.1 管道的创建和使用 .2.1.2 实例 2.1.3 popenpclose函数 2.1.4 fifo的创建和使用 2.1.5 用fif0实现多客户服务 2.1.6 系统对管道和fif0的限制 2.2 消息队列 2.2.1 消息队列的数据结构 2.2.2 消息队列的创建 2.2.3 消息队列的操作 2.2.4 实例 2.2.5 消息队列的限制 2.3 信号量 2.3.1 信号量的数据结构 2.3.2 信号量的创建和操作 2.4 共享内存区 2.4.1 共享内存区的数据结构 2.4.2 共享内存区的创建和操作 2.4.3 实例 2.4.4 共享内存区的限制 2.5 本章小结 第3章 传输层协议tcp和udp 3.1 tcp/ip基本框架 3.1.1 网络协议与层次 3.1.2 数据的封装与分用 3.1.3 客户-服务器模型 3.2 用户数据报协议(udp) 3.2.1 udp首部 3.3 传输控制协议(tcp) 3.3.1 顺序传输 3.3.2 保证数据的可靠性与完整性 3.3.3 双向传输 3.3.4 tcp首部 3.4 tcp连接的建立、握手与结束 3.4.1 连接的建立--三方握手 3.4.2 tcp参数 3.4.3 tcp连接的终止 3.5 端口 3.5.1 端口号的分配 3.5.2 套接字对 3.6 缓冲区 3.7 标准internet服务 3.8 本章小结 第4章 tcp套接字简介 4.1 套接字概述 4.2 套接字地址结构 4.3 位顺序调整 4.3.1 字节处理函数 4.3.2 地址转换函数 4.4 建立套接字 4.5 连接 4.5.1 客户端 4.5.2 服务器端 4.6 服务进程创建 4.6.1 函数介绍 4.6.2 范例 4.7 终止连接 4.8 连接地址信息获取 4.9 socket编程client/server应用简单示例 4.9.1 一个简单www浏览器 4.9.2 inetd编程 4.9.3 获取本地ip 4.9.4 dns的使用 4.9.5 从socket中读出一行语句 4.9.6 处理用户登录及权限设置 4.10 本章小结 第5章 tcp套接字编程实例 5.1 tcp客户--服务器实例一 5.1.1 服务器端代码-vcserver.c 5.1.2 客户端代码-vcclient.c 5.1.3 运行结果 5.2 实例之二 5.2.1 服务器端代码-tcpserver.c 5.2.2 客户端代码-tcpclient.c 5.3 本章小结 第6章 udp数据报 6.1 udp通讯机制 6.1.1 基本通讯过程 6.1.2 udp与tcp的比较 6.1.3 连接的udp 6.1.4 udp应用实例 6.2 udp的应用场合 6.3 增加udp的可靠性 6.4 udp编程综合实例 6.5 本章小结 第7章 套接字中的i/o模型 7.1 阻塞式i/o 7.1.1 读阻塞 7.1.2 写阻塞 7.1.3 会接宁建立中的阻塞 7.1.4 实例一 7.1.5 实例二 7.2 非阻塞式i/o 7.2.1 读操作 7.2.2 写操作 7.2.3 建立连接过程 7.2.4 接收连接过程 7.2.5 非阻塞方式的实现 7.3 实例 7.3.1 taik实例 7.3.2 可处理并发服务的echo实例 第8章 套接字属性控制 8.1 获取和设置套接字属性 8.1.1 getsockopt函数和 setsockopt函数 8.1.2 通用套接字属性 8.2 ipv4和ipv6套接字属性 8.3 套接字属性控制 8.3.1 ioctl函数 8.3.2 fcntl函数 8.4 本章小结 提 高 篇 第9章 进程间通讯的同步 9.1 互斥锁 9.1.1 互斥锁的基本原理 9.1.2 互斥锁的基本操作函数 9.1.3 编程实例 9.2 条件变量 9.2.1 条件变量的基本过程 9.2.2 条件变量的操作函数 9.2.3 编程实例 9.3 读写锁 9.3.1 基本原理 9.3.2 读写锁的操作函数 9.4 记录上锁 9.4.1 记录上锁的基本原理 9.4.2 fcntl记录上锁 9.4.3 记录上锁应用举例 9.5 本章小结 第10章 多路复用和信号驱动i/0 10.1 多路复用 10.1.1 多路复用的基本原理 10.1.2 select函数 10.1.3 select应用实例 10.2 poll函数 10.3 多路复用编程实例 10.4 信号驱动i/0 10.5 本章小结 第11章 高级套接字i/0操作 11.1 send和recv函数 11.1.1 send函数 11.1.2 recv函数 11.2 readv和writev函数 11.2.1 readv函数 11.2.2 writev函数 11.3 sendto和recvfrom函数 11.3.1 sendto函数 11.3.2 recvfrom()函数 11.3.3 一个运用sendto()和recvfrom()函数的实例 11.4 recvmsg和sendmsg函数 11.5 辅助数据 11.6 本章小结 第12章 多线程编程及网络应用 12.1 基本概念 12.1.1 引入多线程的原因 12.1.2 线程的基本概念 12.1.3 线程的分类 12.2 线程基础 12.2.1 线程的基本操作函数 12.2.2 简单的多线程编程 12.2.3 修改线程的属性 12.3 线程应用中的同步问题 12.3.1 特定线程数据 12.3.2 互斥锁 12.3.3 条件变量 12.3.4 信号量 12.4 多线程编程的网络应用 12.4.1 函数的多线程安全性 12.4.2 多线程的实际应用 12.5 本章小结 第13章 ip协议及其属性 13.1 ipv4内容 13.1.1 ipv4数据报的格式 13.1.2 ipv4地址 13.1.3 ipv4选项 13.1.4 internet控制报文协议icmp 13.1.5 internet路由选择协议 13.1.6 ipv4的局限性及其缺点 13.2 ipv6内容 13.2.1 ipv6基本头部的格式 13.2.2 ipv4到ipv6的变化 13.2.3 ipv6地址 13.2.4 ipv6的扩展头部 13.2.5 ipv6路由选择 第14章 网络编程的安全性问题 14.1 系统子程序 14.1.1 i/0子程序 14.1.2 进程控制 14.1.3 文件属性 14.1.4 uid和gid的处理 14.2 标准c库 14.2.1 标准i/o 14.2.2 /etc/passwd处理 14.2.3 /etc/group的处理 14.2.4 加密子程序 14.2.5 运行shell 14.3 写安全的c程序 14.4 root程序的设计 14.5 本章小结 实例篇 实例一 ping 实例二 聊天室的实现 实例三 端口扫描程序 实例四 网页更新检查程序 实例五 sniffer的基本实现 实例六 ip包检查程序 实例七 ip欺骗实例 实例八 路由测试程序 实例九 linux防火墙的编写 实例十 守护进程 实例十一 普通文件传输协议(tftp) 附录 附录一 gcc命令选项 1.使用语法 2.选项 附录二 makefile文件的编写方法 1.makefile文件的基本结构 2.makefile文件编写规则 3.makefile变量 4.假象目的 5.函数 6.实用makefile举例 7.一个的功能齐全的makefile 附录三 gdb调试器 1.gdb的基本使用方法 2.gdb命令 3.在gdb下运行程序
第1章 UNIX基础知识  1.1 引言  1.2 UNIX体系结构  1.3 登录  1.4 文件和目录  1.5 输入和输出  1.6 程序和进程  1.7 出错处理  1.8 用户标识  1.9 信号  1.10 时间值  1.11 系统调用和库函数  1.12 小结  习题  第2章 UNIX标准化及实现  2.1 引言  2.2 UNIX标准化  2.2.1 ISO C  2.2.2 IEEE POSIX  2.2.3 Single UNIX Specification  2.2.4 FIPS  2.3 UNIX系统实现  2.3.1 SVR4  2.3.2 4.4BSD  2.3.3 FreeBSD  2.3.4 Linux  2.3.5 Mac OS X  2.3.6 Solaris  2.3.7 其他UNIX系统  2.4 标准和实现的关系  2.5 限制  2.5.1 ISO C限制  2.5.2 POSIX限制  2.5.3 XSI限制  2.5.4 sysconf、pathconf和fpathconf函数  2.5.5 不确定的运行时限制  2.6 选项  2.7 功能测试宏  2.8 基本系统数据类型  2.9 标准之间的冲突  2.10 小结  习题  第3章 文件I/O  3.1 引言  3.2 文件描述符  3.3 open函数  3.4 creat函数  3.5 close函数  3.6 lseek函数  3.7 read函数  3.8 write函数  3.9 I/O的效率  3.10 文件共享  3.11 原子操作  3.12 dup和dup2函数  3.13 sync、fsync和fdatasync函数  3.14 fcntl函数  3.15 ioctl函数  3.16 /dev/fd  3.17 小结  习题  第4章 文件和目录  4.1 引言  4.2 stat、fstat和lstat函数  4.3 文件类型  4.4 设置用户ID和设置组ID  4.5 文件访问权限  4.6 新文件和目录的所有权  4.7 access函数  4.8 umask函数  4.9 chmod和fchmod函数  4.10 粘住位  4.11 chown、fchown和lchown函数  4.12 文件长度  4.13 文件截短  4.14 文件系统  4.15 link、unlink、remove和rename函数  4.16 符号链接  4.17 symlink和readlink函数  4.18 文件的时间  4.19 utime函数  4.20 mkdir和rmdir函数  4.21 读目录  4.22 chdir、fchdir和getcwd函数  4.23 设备特殊文件  4.24 文件访问权限位小结  4.25 小结  习题  第5章 标准I/O库  5.1 引言  5.2 流和FILE对象  5.3 标准输入、标准输出和标准出错  5.4 缓冲  5.5 打开流  5.6 读和写流  5.7 每次一行I/O  5.8 标准I/O的效率  5.9 二进制I/O  5.10 定位流  5.11 格式化I/O  5.12 实现细节  5.13 临时文件  5.14 标准I/O的替代软件  5.15 小结  习题  第6章 系统数据文件和信息  6.1 引言  6.2 口令文件  6.3 阴影口令  6.4 组文件  6.5 附加组ID  6.6 实现的区别  6.7 其他数据文件  6.8 登录账户记录  6.9 系统标识  6.10 时间和日期例程  6.11 小结  习题  第7章 进程环境  7.1 引言  7.2 main函数  7.3 进程终止  7.4 命令行参数  7.5 环境表  7.6 C程序的存储空间布局  7.7 共享库  7.8 存储器分配  7.9 环境变量  7.10 setjmp和longjmp函数  7.11 getrlimit和setrlimit函数  7.12 小结  习题  第8章 进程控制  8.1 引言  8.2 进程标识符  8.3 fork函数  8.4 vfork函数  8.5 exit函数  8.6 wait和waitpid函数  8.7 waitid函数  8.8 wait3和wait4函数  8.9 竞争条件  8.10 exec函数  8.11 更改用户ID和组ID  8.12 解释器文件  8.13 system函数  8.14 进程会计  8.15 用户标识  8.16 进程时间  8.17 小结  习题  第9章 进程关系  9.1 引言  9.2 终端登录  9.3 网络登录  9.4 进程组  9.5 会话  9.6 控制终端  9.7 tcgetpgrp、tcsetpgrp和tcgetsid函数  9.8 作业控制  9.9 shell执行程序  9.10 孤儿进程组  9.11 FreeBSD实现  9.12 小结  习题  第10章 信号  10.1 引言  10.2 信号概念  10.3 signal函数  10.4 不可靠的信号  10.5 中断的系统调用  10.6 可重入函数  10.7 SIGCLD语义  10.8 可靠信号术语和语义  10.9 kill和raise函数  10.10 alarm和pause函数  10.11 信号集  10.12 sigprocmask函数  10.13 sigpending函数  10.14 sigaction函数  10.15 sigsetjmp和siglongjmp函数  10.16 sigsuspend函数  10.17 abort函数  10.18 system函数  10.19 sleep函数  10.20 作业控制信号  10.21 其他特征  10.22 小结  习题  第11章 线程  11.1 引言  11.2 线程概念  11.3 线程标识  11.4 线程的创建  11.5 线程终止  11.6 线程同步  11.7 小结  习题  第12章 线程控制  12.1 引言  12.2 线程限制  12.3 线程属性  12.4 同步属性  12.5 重入  12.6 线程私有数据  12.7 取消选项  12.8 线程和信号  12.9 线程和fork  12.10 线程和I/O  12.11 小结  习题  第13章 守护进程  13.1 引言  13.2 守护进程的特征  13.3 编程规则  13.4 出错记录  13.5 单实例守护进程  13.6 守护进程的惯例  13.7 客户进程-服务器进程模型  13.8 小结  习题  第14章 高级I/O  14.1 引言  14.2 非阻塞I/O  14.3 记录锁  14.4 STREAMS  14.5 I/O多路转接  14.5.1 select和pselect函数  14.5.2 poll函数  14.6 异步I/O  14.6.1 系统V异步I/O  14.6.2 BSD异步I/O  14.7 readv和writev函数  14.8 readn和writen函数  14.9 存储映射I/O  14.10 小结  习题  第15章 进程间通信  15.1 引言  15.2 管道  15.3 popenpclose函数  15.4 协同进程  15.5 FIFO  15.6 XSI IPC  15.6.1 标识符和键  15.6.2 权限结构  15.6.3 结构限制  15.6.4 优点和缺点  15.7 消息队列  15.8 信号量  15.9 共享存储  15.10 客户进程-服务器进程属性  15.11 小结  习题  第16章 网络IPC:套接字  16.1 引言  16.2 套接字描述符  16.3 寻址  16.3.1 字节序  16.3.2 地址格式  16.3.3 地址查询  16.3.4 将套接字与地址绑定  16.4 建立连接  16.5 数据传输  16.6 套接字选项  16.7 带外数据  16.8 非阻塞和异步I/O  16.9 小结  习题  第17章 高级进程间通信  17.1 引言  17.2 基于STREAMS的管道  17.2.1 命名的STREAMS管道  17.2.2 唯一连接  17.3 UNIX域套接字  17.3.1 命名UNIX域套接字  17.3.2 唯一连接  17.4 传送文件描述符  17.4.1 经由基于STREAMS的管道传送文件描述符  17.4.2 经由UNIX域套接字传送文件描述符  17.5 open服务器版本1  17.6 open服务器版本2  17.7 小结  习题  第18章 终端I/O  18.1 引言  18.2 综述  18.3 特殊输入字符  18.4 获得和设置终端属性  18.5 终端选项标志  18.6 stty命令  18.7 波特率函数  18.8 行控制函数  18.9 终端标识  18.10 规范模式  18.11 非规范模式  18.12 终端的窗口大小  18.13 termcap,terminfo和curses  18.14 小结  习题  第19章 伪终端  19.1 引言  19.2 概述  19.3 打开伪终端设备  19.3.1 基于STREAMS的伪终端  19.3.2 基于BSD的伪终端  19.3.3 基于Linux的伪终端  19.4 pty_fork函数  19.5 pty程序  19.6 使用pty程序  19.7 高级特性  19.8 小结  习题  第20章 数据库函数库  20.1 引言  20.2 历史  20.3 函数库  20.4 实现概述  20.5 集中式或非集中式  20.6 并发  20.7 构造函数库  20.8 源代码  20.9 性能  20.10 小结  习题  第21章 与网络打印机通信  21.1 引言  21.2 网络打印协议  21.3 超文本传输协议  21.4 打印假脱机技术  21.5 源代码  21.6 小结  习题  附录A 函数原型  附录B 其他源代码  附录C 部分习题答案  参考书目
目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.3 文件和目录 2 1.4 输入和输出 5 1.5 程序和进程 7 1.6 ANSI C 9 1.7 出错处理 10 1.8 用户标识 11 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.3 UNIX实现 19 2.4 标准和实现的关系 21 2.5 限制 21 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数 79 4.21 读目录 80 4.22 chdir, fchdir和getcwd函数 84 4.23 特殊设备文件 86 4.24 sync和fsync函数 87 4.25 文件存取许可权位小结 88 4.26 小结 89 习题 89 第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.7 每次一行I/O 98 5.8 标准I/O的效率 99 5.9 二进制I/O 100 5.10 定位流 102 5.11 格式化I/O 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令文件 110 6.3 阴影口令 112 6.4 组文件 113 6.5 添加组ID 114 6.6 其他数据文件 115 6.7 登录会计 116 6.8 系统标识 116 6.9 时间和日期例程 117 6.10 小结 121 习题 121 第7章 UNIX进程的环境 122 7.1 引言 122 7.2 main 函数 122 7.3 进程终止 122 7.4 命令行参数 125 7.5 环境表 126 7.6 C程序的存储空间布局 126 7.7 共享库 127 7.8 存储器分配 128 7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧