1. Process Control 进程控制 1.1 Creating new processes: fork() 创建新进程:fork函数 1.1.1 What does fork() do? fork函数干什么? 1.1.2 What's the difference between fork() and vfork()? fork函数 与 vfork函数的区别在哪里? 1.1.3 Why use _exit rather than exit in the child branch of a fork? 为何在一个fork的子进程分支中使用_exit函数而不使用exit函数? 1.2 Environment variables 环境变量 1.2.1 How can I get/set an environment variable from a program? 我怎样在程序中获得/设置环境变量? 1.2.2 How can I read the whole environment? 我怎样读取整个环境变量表? 1.3 How can I sleep for less than a second? 我怎样睡眠小于一秒? 1.4 How can I get a finer-grained version of alarm()? 我怎样得到一个更细分时间单位的alarm函数版本(译者注:希望alarm的时间小于一秒)? 1.5 How can a parent and child process communicate? 父子进程如何通信? 1.6 How do I get rid of zombie processes? 我怎样去除僵死进程? 1.6.1 What is a zombie? 何为僵死进程? 1.6.2 How do I prevent them from occuring? 我怎样避免它们的出现? 1.7 How do I get my program to act like a daemon? 我怎样使我的程序作为守护程序运行? 1.8 How can I look at process in the system like ps does? 我怎样象ps程序一样审视系统的进程? 1.9 Given a pid, how can I tell if it's a running program? 给定一个进程号(译者注:pid: process ID),我怎样知道它是个正在运行的程序? 1.10 What's the return value of system/pclose/waitpid? system函数,pclose函数,waitpid函数 的返回值是什么? 1.11 How do I find out about a process' memory usage? 我怎样找出一个进程的存储器使用情况? 1.12 Why do processes never decrease in size? 为什么进程的大小不缩减? 1.13 How do I change the name of my program (as seen by `ps')? 我怎样改变我程序的名字(即“ps”看到的名字)? 1.14 How can I find a process' executable file? 我怎样找到进程的相应可执行文件? 1.14.1 So where do I put my configuration files then? 那么,我把配置文件放在哪里呢? 1.15 Why doesn't my process get SIGHUP when its parent dies? 为何父进程死时,我的进程未得到SIGHUP信号? 1.16 How can I kill all descendents of a process? 我怎样杀死一个进程的所有派生进程?
2. General File handling (including pipes and sockets) 一般文件操作(包括管道和套接字) 2.1 How to manage multiple connections? 怎样管理多个连接? 2.1.1 How do I use select()? 我怎样使用select()? 2.1.2 How do I use poll()? 我怎样使用poll() ? 2.1.3 Can I use SysV IPC at the same time as select or poll? 我是否可以将SysV 进程间通信 (译者注:IPC: Interprocess Communications) 与select或poll同 时使用? 2.2 How can I tell when the other end of a connection shuts down? 我怎么知道连接的另一端已关闭? 2.3 Best way to read directories? 读目录的最好方法? 2.4 How can I find out if someone else has a file open? 我怎么知道其他人已经打开一个文件? 2.5 How do I `lock' a file? 我怎样锁定一个文件? 2.6 How do I find out if a file has been updated by another process? 我怎么知道一个文件是否已被其他进程更新? 2.7 How does the `du' utility work? “du”工具程序是怎么工作的? 2.8 How do I find the size of a file? 我怎么知道一个文件的大小? 2.9 How do I expand `~' in a filename like the shell does? 我怎样象shell程序一样将一个文件名中含有的“~”展开? 2.10 What can I do with named pipes (FIFOs)? 我能用有名管道(FIFOs)(译者注:FIFO: First In First Oout)干什么? 2.10.1 What is a named pipe? 什么是有名管道? 2.10.2 How do I create a named pipe? 我怎样创建一个有名管道? 2.10.3 How do I use a named pipe? 我怎样使用一个有名管道? 2.10.4 Can I use a named pipe across NFS? 我能基于网络文件系统(译者注:NFS:Network File System)使用有名管道吗? 2.10.5 Can multiple processes write to the pipe simultaneously? 多个进程能否同时向这个管道写执行写操作? 2.10.6 Using named pipes in applications 在应用程序中使用有名管道。
3. Terminal I/O 终端输入/输出(I/O:input/output) 3.1 How can I make my program not echo input? 我怎样使我的程序不回射输入? 3.2 How can I read single characters from the terminal? 我怎样从终端读取单个字符? 3.3 How can I check and see if a key was pressed? 我怎样检查是否一个键被摁下? 3.4 How can I move the cursor around the screen? 我怎样将光标在屏幕里移动? 3.5 What are pttys? pttys(pttys:Pseudo-teletypes)是什么? 3.6 How to handle a serial port or modem? 怎样控制一个串行口和调制解调器(译者注:modem: modulate-demodulate) 3.6.1 Serial device names and types 串行设备和类型 3.6.2 Setting up termios flags 设置termios的标志位 3.6.2.1 c_iflag 3.6.2.2 c_oflag 3.6.2.3 c_cflag 3.6.2.4 c_lflag 3.6.2.5 c_cc
4. System Information 系统信息 4.1 How can I tell how much memory my system has? 我怎样知道我的系统有多少存储器容量? 4.2 How do I check a user's password? 我怎样检查一个用户的口令? 4.2.1 How do I get a user's password? 我怎样得到一个用户的口令? 4.2.2 How do I get shadow passwords by uid? 我怎样通过用户号(译者注:uid: User ID)得到阴影口令文件中的口令? 4.2.3 How do I verify a user's password? 我怎样核对一个用户的口令?
5. Miscellaneous programming 编程杂技 5.1 How do I compare strings using wildcards? 我怎样使用通配字符比较字符串? 5.1.1 How do I compare strings using filename patterns? 我怎样使用文件名通配模式比较字符串? 5.1.2 How do I compare strings using regular expressions? 我怎样使用正则表达式比较字符串? 5.2 What's the best way to send mail from a program? 什么是在程序中发送电子邮件的最好方法? 5.2.1 The simple method: /bin/mail 简单方法:/bin/mail 5.2.2 Invoking the MTA directly: /usr/lib/sendmail 直接启动邮件传输代理(译者注:MTA: mail transfer agent):/usr/bin/sendmail 5.2.2.1 Supplying the envelope explicitly 显式提供收件人信息 5.2.2.2 Allowing sendmail to deduce the recipients 允许sendmail程序根据邮件内容分析出收件人
6. Use of tools 工具的使用 6.1 How can I debug the children after a fork? 我怎样调试fork函数产生的子进程? 6.2 How to build library from other libraries? 怎样通过其他库文件建立新的库文件? 6.3 How to create shared libraries / dlls? 怎样创建动态连接库/dlls? 6.4 Can I replace objects in a shared library? 我能更改一个动态连接库里的目标吗? 6.5 How can I generate a stack dump from within a running program? 我能在一个运行着的程序中生成堆栈映象吗?
printf("The value for the environment variable TERM is "); if(envvar) { printf("%s ",envvar); } else { printf("not set. "); }
现在假设你想创建一个新的环境变量,变量名为‘MYVAR’,值为‘MYVAL’。 以下是你将怎样做:
static char envbuf[256];
sprintf(envbuf,"MYVAR=%s","MYVAL");
if(putenv(envbuf)) { printf("Sorry, putenv() couldn't find the memory for %s ",envbuf); /* Might exit() or something here if you can't live without it */ }
一个基本的问题是, 存在各种各样的认证系统, 所以口令也就并不总是象它们看上去 那样。 在传统的系统中, 使用UNIX风格的加密算法,加密算法是不同的,有些系统使 用DES(译者注:DES:Data Encryption Standard,为NIST[National Institute of Standard and Technology]确认的标准加密算法,最新消息表明,NIST将采用一种新 的加密标准Rijndael逐步取代DES)算法,其它的系统, 如FreeBSD国际版使用MD5(译者 注:MD5是当今最为广泛使用的单项散列算法,由Ron Rivest发明,详细资料参见RFC 1321 )算法。
有好几种从Unix程序发电子邮件的方法。根据不同情况最好的选择有所不同, 所以我将提供两个方法。还有第三种方法,这里没有说道,是连接本地主机的SMTP (译者注:SMTP:Simple Mail Transfer Protocol简单邮件传输协议)端口并直接使 用SMTP协议,参见RFC 821(译者注:RFC:Request For Comments)。