📄 unix
字号:
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
<sys/types.h><BR>
#include
<unistd.h><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\n",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>
参见<<UNIX环境高级编程>> W. R. Stevens, 1993,
尤晋元等译(以下简称<<高级编<BR>
程>>), 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)
(译者注:译文取自<<高级编程>>,指:进程所属的对话期<BR>
(session)ID, 一个对话期包括一个或多个进程组,
更详细说明参见<<高级编程>><BR>
9.5节)<BR><BR> *
当前工作目录<BR><BR> * 根目录
(译者注:根目录不一定是“/”,它可由chroot函数改变)<BR><BR>
* 文件方式创建屏蔽字(file mode creation mask (umask))
(译者注:译文取自<<高级编<BR>
程>>,指:创建新文件的缺省屏蔽字)<BR><BR> *
资源限制<BR><BR> *
控制终端<BR><BR>子进程所独有:<BR><BR> *
进程号<BR><BR> *
不同的父进程号(译者注:即子进程的父进程号与父进程的父进程号不同,父进<BR>
程号可由getppid函数得到)<BR><BR> *
自己的文件描述符和目录流的拷贝(译者注:目录流由opendir函数创建,因其为<BR>
顺序读取,顾称“目录流”)<BR><BR> *
子进程不继承父进程的进程,正文(text),数据和其它锁定内存(memory
locks)<BR>
(译者注:锁定内存指被锁定的虚拟内存页,锁定后,不允许内核将其在必要时<BR>
换出(page out),详细说明参见<<The GNU C Library
Reference Manual>>
2.2版,<BR> 1999,
3.4.2节)<BR><BR> *
在tms结构中的系统时间(译者注:tms结构可由times函数获得,它保存四个数据<BR>
用于记录进程使用中央处理器(CPU:Central Processing
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -