⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 975.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
“http://www.erlenstar.demon.co.uk/unix/faq_toc.html”。<br>
美国镜像站点设在“http://www.whitefang.com/unix/faq_toc.html”。<br>
<br>
这篇文档可以用FTP的方式自主机rtfm.mit.edu和其众多镜像站点的news.answers 归<br>
档中找到(译者注:URL是ftp://rtfm.mit.edu/pub/faqs/unix-faq/programmer/faq)。<br>
它的官方归档名是“unix-faq/programmer/faq”。其他将网络新闻组*.answers归档的<br>
服务器也会在目录“comp.unix.programmer”下存放这篇文档。<br>
<br>
其他信息资源未于此一一列出。读者可在新闻组comp.unix.programmer每周定期发<br>
布的[READ ME FIRST]中找到其他“常见问题”,书籍,原代码等资源的的连接。<br>
关于管理新闻组的小问题等等也能在其中找到;而我只想在将这篇文档中特别讨<br>
论问题和回答。<br>
<br>
所有提供的资料已经经过维护者编辑,所有错误或疏忽是我的责任,跟提供者无<br>
关。<br>
<br>
这篇“常见问题解答”现在以Texinfo资源格式维护;我使用“makeinfo”程序将其<br>
转换成供新闻组阅读的原始字符文件格式,并使用“texi2html”程序将其转换成<br>
HTML格式。<br>
<br>
版权所有:1997,1998, 1999, 2000 Andrew Gierth. 这篇文档允许通过新闻组或<br>
电子邮件方式的分发,也允许在news.answers 归档的镜像FTP或WWW站点归档存<br>
放,并保证提供所有维持该文档更新应付出的努力。(本许可能够以个人为单位取<br>
消)未经维护者许可,不允许将该文档以其他任何方式发表,无论是书面,WWW,<br>
光盘,或在其他任何媒体。<br>
<br>
内容提供者名单,无先后次序:<br>
<br>
Andrew Gierth       &lt;andrew@erlenstar.demon.co.uk&gt;<br>
Patrick J. Horgan   withheld<br>
Stephen Baynes      &lt;stephen.baynes@soton.sc.philips.com&gt;<br>
James Raynard       withheld<br>
Michael F. Quigley  withheld<br>
Ken Pizzini         withheld<br>
Thamer Al-Herbish   withheld<br>
Nick Kew            &lt;nick.kew@pobox.com&gt;<br>
Dan Abarbanel       withheld<br>
Billy Chambless     &lt;billy@cast.msstate.edu&gt;<br>
Walter Briscoe      &lt;walter@wbriscoe.demon.co.uk&gt;<br>
Jim Buchanan        &lt;jbuchana@buchanan1.net&gt;<br>
Dave Plonka         &lt;plonka@doit.wisc.edu&gt;<br>
Daniel Stenberg     withheld<br>
Ralph Corderoy      &lt;ralph@inputplus.demon.co.uk&gt;<br>
Stuart Kemp         withheld<br>
Sergei Chernev      &lt;ser@nsu.ru&gt;<br>
Bjorn Reese         withheld<br>
Joe Halpin          &lt;jhalpin@nortel.ca&gt;<br>
Aaron Crane         &lt;aaronc@pobox.com&gt;<br>
Geoff Clare         &lt;gwc@root.co.uk&gt;<br>
--------------------------------------<br>
Edward Jiang        &lt;Edward.Jiang@oracle.com&gt;<br>
Zhen Yao            &lt;csvhe@dcs.warwick.ac.uk&gt;<br>
<br>
问题目录<br>
********<br>
<br>
(译者:这里我有意保留原文以便于查询)<br>
<br>
1. Process Control 进程控制<br>
 1.1 Creating new processes: fork() 创建新进程:fork函数<br>
   1.1.1 What does fork() do? fork函数干什么?<br>
   1.1.2 What's the difference between fork() and vfork()? fork函数 与 vfork函数的区别在哪里?<br>
   1.1.3 Why use _exit rather than exit in the child branch of a fork? 为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?<br>
 1.2 Environment variables 环境变量<br>
   1.2.1 How can I get/set an environment variable from a program? 我怎样在程序中获得/设置环境变量?<br>
   1.2.2 How can I read the whole environment? 我怎样读取整个环境变量表?<br>
 1.3 How can I sleep for less than a second? 我怎样睡眠小于一秒?<br>
 1.4 How can I get a finer-grained version of alarm()? 我怎样得到一个更细分时间单位的alarm函数版本(译者注:希望alarm的时间小于一秒)?<br>
 1.5 How can a parent and child process communicate? 父子进程如何通信?<br>
 1.6 How do I get rid of zombie processes? 我怎样去除僵死进程?<br>
   1.6.1 What is a zombie? 何为僵死进程?<br>
   1.6.2 How do I prevent them from occuring? 我怎样避免它们的出现?<br>
 1.7 How do I get my program to act like a daemon? 我怎样使我的程序作为守护程序运行?<br>
 1.8 How can I look at process in the system like ps does? 我怎样象ps程序一样审视系统的进程?<br>
 1.9 Given a pid, how can I tell if it's a running program? 给定一个进程号(译者注:pid: process ID),我怎样知道它是个正在运行的程序?<br>
 1.10 What's the return value of system/pclose/waitpid? system函数,pclose函数,waitpid函数 的返回值是什么?<br>
 1.11 How do I find out about a process' memory usage? 我怎样找出一个进程的存储器使用情况?<br>
 1.12 Why do processes never decrease in size? 为什么进程的大小不缩减?<br>
 1.13 How do I change the name of my program (as seen by `ps')? 我怎样改变我程序的名字(即“ps”看到的名字)?<br>
 1.14 How can I find a process' executable file? 我怎样找到进程的相应可执行文件?<br>
   1.14.1 So where do I put my configuration files then? 那么,我把配置文件放在哪里呢?<br>
 1.15 Why doesn't my process get SIGHUP when its parent dies? 为何父进程死时,我的进程未得到SIGHUP信号?<br>
 1.16 How can I kill all descendents of a process? 我怎样杀死一个进程的所有派生进程?<br>
<br>
2. General File handling (including pipes and sockets) 一般文件操作(包括管道和套接字)<br>
 2.1 How to manage multiple connections? 怎样管理多个连接?<br>
   2.1.1 How do I use select()? 我怎样使用select()?<br>
   2.1.2 How do I use poll()? 我怎样使用poll() ?<br>
   2.1.3 Can I use SysV IPC at the same time as select or poll? 我是否可以将SysV 进程间通信 (译者注:IPC: Interprocess Communications) 与select或poll同<br>
时使用?<br>
 2.2 How can I tell when the other end of a connection shuts down? 我怎么知道连接的另一端已关闭?<br>
 2.3 Best way to read directories? 读目录的最好方法?<br>
 2.4 How can I find out if someone else has a file open? 我怎么知道其他人已经打开一个文件?<br>
 2.5 How do I `lock' a file? 我怎样锁定一个文件?<br>
 2.6 How do I find out if a file has been updated by another process? 我怎么知道一个文件是否已被其他进程更新?<br>
 2.7 How does the `du' utility work? “du”工具程序是怎么工作的?<br>
 2.8 How do I find the size of a file? 我怎么知道一个文件的大小?<br>
 2.9 How do I expand `~' in a filename like the shell does? 我怎样象shell程序一样将一个文件名中含有的“~”展开?<br>
 2.10 What can I do with named pipes (FIFOs)? 我能用有名管道(FIFOs)(译者注:FIFO: First In First Oout)干什么?<br>
   2.10.1 What is a named pipe? 什么是有名管道?<br>
   2.10.2 How do I create a named pipe? 我怎样创建一个有名管道?<br>
   2.10.3 How do I use a named pipe? 我怎样使用一个有名管道?<br>
   2.10.4 Can I use a named pipe across NFS? 我能基于网络文件系统(译者注:NFS:Network File System)使用有名管道吗?<br>
   2.10.5 Can multiple processes write to the pipe simultaneously? 多个进程能否同时向这个管道写执行写操作?<br>
   2.10.6 Using named pipes in applications 在应用程序中使用有名管道。<br>
<br>
3. Terminal I/O 终端输入/输出(I/O:input/output)<br>
 3.1 How can I make my program not echo input? 我怎样使我的程序不回射输入?<br>
 3.2 How can I read single characters from the terminal? 我怎样从终端读取单个字符?<br>
 3.3 How can I check and see if a key was pressed? 我怎样检查是否一个键被摁下?<br>
 3.4 How can I move the cursor around the screen? 我怎样将光标在屏幕里移动?<br>
 3.5 What are pttys? pttys(pttys:Pseudo-teletypes)是什么?<br>
 3.6 How to handle a serial port or modem? 怎样控制一个串行口和调制解调器(译者注:modem: modulate-demodulate)<br>
   3.6.1 Serial device names and types 串行设备和类型<br>
   3.6.2 Setting up termios flags 设置termios的标志位<br>
     3.6.2.1 c_iflag<br>
     3.6.2.2 c_oflag<br>
     3.6.2.3 c_cflag<br>
     3.6.2.4 c_lflag<br>
     3.6.2.5 c_cc<br>
<br>
4. System Information 系统信息<br>
 4.1 How can I tell how much memory my system has? 我怎样知道我的系统有多少存储器容量?<br>
 4.2 How do I check a user's password? 我怎样检查一个用户的口令?<br>
   4.2.1 How do I get a user's password? 我怎样得到一个用户的口令?<br>
   4.2.2 How do I get shadow passwords by uid? 我怎样通过用户号(译者注:uid: User ID)得到阴影口令文件中的口令?<br>
   4.2.3 How do I verify a user's password? 我怎样核对一个用户的口令?<br>
<br>
5. Miscellaneous programming 编程杂技<br>
 5.1 How do I compare strings using wildcards? 我怎样使用通配字符比较字符串?<br>
   5.1.1 How do I compare strings using filename patterns? 我怎样使用文件名通配模式比较字符串?<br>
   5.1.2 How do I compare strings using regular expressions? 我怎样使用正则表达式比较字符串?<br>
 5.2 What's the best way to send mail from a program? 什么是在程序中发送电子邮件的最好方法?<br>
   5.2.1 The simple method: /bin/mail 简单方法:/bin/mail<br>
   5.2.2 Invoking the MTA directly: /usr/lib/sendmail 直接启动邮件传输代理(译者注:MTA: mail transfer agent):/usr/bin/sendmail<br>
     5.2.2.1 Supplying the envelope explicitly 显式提供收件人信息<br>
     5.2.2.2 Allowing sendmail to deduce the recipients 允许sendmail程序根据邮件内容分析出收件人<br>
<br>
6. Use of tools 工具的使用<br>
 6.1 How can I debug the children after a fork? 我怎样调试fork函数产生的子进程?<br>
 6.2 How to build library from other libraries? 怎样通过其他库文件建立新的库文件?<br>
 6.3 How to create shared libraries / dlls? 怎样创建动态连接库/dlls?<br>
 6.4 Can I replace objects in a shared library? 我能更改一个动态连接库里的目标吗?<br>
 6.5 How can I generate a stack dump from within a running program? 我能在一个运行着的程序中生成堆栈映象吗?<br>
<br>
<br>
1. 进程控制<br>
***********<br>
<br>
1.1 创建新进程:fork函数<br>
========================<br>
<br>
1.1.1 fork函数干什么?<br>
----------------------<br>
<br>
    #include &lt;sys/types.h&gt;<br>
    #include &lt;unistd.h&gt;<br>
<br>
    pid_t fork(void);<br>
<br>
‘fork()’函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为<br>
父进程。你可以通过检查‘fork()’函数的返回值知道哪个是父进程,哪个是子进程。父<br>
进程得到的返回值是子进程的进程号,而子进程则返回0。以下这个范例程序说明它的基本<br>
功能:<br>
<br>
    pid_t pid;<br>
<br>
    switch (pid = fork())<br>
    {<br>
    case -1:<br>
        /* 这里pid为-1,fork函数失败 */<br>
        /* 一些可能的原因是 */<br>
        /* 进程数或虚拟内存用尽 */<br>
        perror("The fork failed!");<br>
        break;<br>
<br>
    case 0:<br>
        /* pid为0,子进程 */<br>
        /* 这里,我们是孩子,要做什么? */<br>
        /* ... */<br>
        /* 但是做完后, 我们需要做类似下面: */<br>
        _exit(0);<br>
<br>
    default:<br>
        /* pid大于0,为父进程得到的子进程号 */<br>
        printf("Child's pid is %d",pid);<br>
    }<br>
<br>
当然,有人可以用‘if() ... else ...’语句取代‘switch()’语句,但是上面的形式是<br>
一个有用的惯用方法。<br>
<br>
知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为<br>
不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是<br>
这些东西的 *拷贝*,不是它们本身。<br>
<br>
由子进程自父进程继承到:<br>
<br>
  * 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))<br>
<br>
  * 环境(environment)<br>
<br>
  * 堆栈<br>
<br>
  * 内存<br>
<br>
  * 打开文件的描述符(注意对应的文件的位置由父子进程共享,这会引起含糊情况)<br>
<br>
  * 执行时关闭(close-on-exec) 标志 (译者注:close-on-exec标志可通过fnctl()对文件描<br>
    述符设置,POSIX.1要求所有目录流都必须在exec函数调用时关闭。更详细说明,<br>
    参见&lt;&lt;UNIX环境高级编程&gt;&gt; W. R. Stevens, 1993, 尤晋元等译(以下简称&lt;&lt;高级编<br>
    程&gt;&gt;), 3.13节和8.9节)<br>
<br>
  * 信号(signal)控制设定<br>
<br>
  * nice值 (译者注:nice值由nice函数设定,该值表示进程的优先级,数值越小,优<br>
    先级越高)<br>
<br>
  * 进程调度类别(scheduler class) (译者注:进程调度类别指进程在系统中被调度时所<br>
    属的类别,不同类别有不同优先级,根据进程调度类别和nice值,进程调度程序可计<br>
    算出每个进程的全局优先级(Global process prority),优先级高的进程优先执行)<br>
<br>
  * 进程组号<br>
<br>
  * 对话期ID(Session ID) (译者注:译文取自&lt;&lt;高级编程&gt;&gt;,指:进程所属的对话期<br>
    (session)ID, 一个对话期包括一个或多个进程组, 更详细说明参见&lt;&lt;高级编程&gt;&gt;<br>
    9.5节)<br>
<br>
  * 当前工作目录<br>
<br>
  * 根目录 (译者注:根目录不一定是“/”,它可由chroot函数改变)<br>
<br>
  * 文件方式创建屏蔽字(file mode creation mask (umask)) (译者注:译文取自&lt;&lt;高级编<br>
    程&gt;&gt;,指:创建新文件的缺省屏蔽字)<br>
<br>
  * 资源限制<br>
<br>
  * 控制终端<br>
<br>
子进程所独有:<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -