在《UNIX环境高级编程》第二版中,如果编写源代码时,需要用到apue.h这个头文件,此资料包含了apue.h头文件以及安装说明。 注:测试Linux版本:Fedora 14及Fedora 15
2022-11-16 14:18:14 111KB apue.h 《UNIX环境高级编程》Linux
1
正如前面所述,这是U N I X文件系统的经典格式,在B a c h〔1 9 8 6〕一书的第4章中对此作了 说明。关于伯克利快速文件系统对此所作的更改请参阅 L e ffler 等〔1 9 8 9〕中的第7章。 4.15 link,unlink,remove和r e n a m e函数 如上节所述,任何一个文件可以有多个目录项指向其 i节点。创建一个向现存文件连接的 方法是使用l i n k函数。 #include int link(const char *e x i s t i n g p a t h, const char *n e w p a t h) ; 返回:若成功则为0,若出错则为-1 此函数创建一个新目录项n e w p a t h,它引用现存文件e x i s t i n g p a t h。如若n e w p a t h已经存在,则返 回出错。 创建新目录项以及增加连接计数应当是个原子操作(请回忆在3.11节中对原子操作的讨论)。 大多数实现,例如S V R 4和4 . 3+B S D要求这两个路径名在同一个文件系统中。 P O S I X . 1允许支持跨越文件系统的连接的实现。 只有超级用户进程可以创建指向一个目录的新连接。其理由是这样做可能在文件系统中形 成循环,大多数处理文件系统的公用程序都不能处理这种情况( 4 . 1 6节将说明一个由符号连接 引入的循环的例子)。 为了删除一个现存的目录项,可以调用u n l i n k函数。 #include int unlink(const char *p a t h n a m e) ; 返回:若成功则为0,若出错则为-1 此函数删除目录项,并将由p a t h n a m e所引用的文件的连接计数减1。如果该文件还有其他连接, 则仍可通过其他连接存取该文件的数据。如果出错,则不对该文件作任何更改。 我们在前面已经提及,为了解除对文件的连接,必须对包含该目录项的目录具有写和执行 许可权。正如4 . 1 0节所述,如果对该目录设置了粘住位,则对该目录必须具有写许可权,并且 具备下面三个条件之一: • 拥有该文件。 • 拥有该目录。 • 具有超级用户优先权。 第 4章 文件和目录 7 1 下载
2022-08-01 08:45:24 18.16MB UNIX 环境高级编程 linux
1
6.7 登录会计 大多数U N I X系统都提供下列两个数据文件: u t m p文件,它记录当前登录进系统的各个用 户;w t m p文件,它跟踪各个登录和注销事件。 在V 7中,包含下列结构的一个二进制记录写入这两个文件中: struct utmp { char ut_line[8]; /* tty line: "ttyh0", "ttyd0", "ttyp0", ... */ char ut_name[8]; /* login name */ long ut_time; /* seconds since Epoch */ } ; 登录时, l o g i n程序填写这样一个结构,然后将其写入到 u t m p文件中,同时也将其添写到 w t m p 文件中。注销时, i n i t进程将u t m p文件中相应的记录擦除 (每个字节都填以0 ),并将一个新记录 添写到w t m p文件中。读w t m p文件中的该注销记录,其u t _ n a m e字段清除为0。在系统再启动时, 以及更改系统时间和日期的前后,都在 w t m p文件中添写特殊的记录项。 w h o ( 1 )程序读u t m p文 件,并以可读格式打印其内容。后来的 U N I X版本提供 l a s t ( 1 )命令,它读w t m p文件并打印所选 择的记录。 大多数U N I X版本仍提供u t m p和w t m p文件,但其中的信息量却增加了。V 7中2 0字节的结构 在S V R 2中已扩充为3 6字节,而在S V R 4中,u t m p结构已扩充为3 5 0字节。 S V R 4中这些记录的详细格式请参见手册页 u t m p ( 4 )和u t m p x ( 4 )。S V R 4中这两 个文件都在目录 / v a r / a d m中。S V R 4提供了很多函数 (见g e t u t ( 3 )和g e t u t x ( 3 ) )读或写 这两个文件。 4 . 3 + B S D中登录记录的格式请参见手册页 u t m p ( 5 )。这两个文件的路径名是 / v a r / r u n / u t m p和/ v a r / l o g / w t m p。 6.8 系统标识 P O S I X . 1定义了u n a m e函数,它返回与主机和操作系统有关的信息。 #include int uname(struct utsname *n a m e) ; 返回:若成功则为非负值,若出错则为- 1 1 1 6 U N I X环境高级编程 下载
2022-06-05 19:39:35 18.16MB UNIX 环境高级编程 linux
1
9.3 网络登录 9.3.1 4.3+B S D网络登录 在上节所述的终端登录中 , i n i t知道哪些终端设备可用来进行登录,并为每个设备生成一个 g e t t y进程。但是,对网络登录则情况有所不同,所有登录都经由内核的网络界面驱动程序(例 如:以太网驱动程序),事先并不知道将会有多少这样的登录。不是使一个进程等待每一个可 能的登录,而是必须等待一个网络连接请求的到达。在 4 . 3 + B S D中,有一个称为 i n e t d的进程 (有时称为 Internet superserver),它等待大多数网络连接。本书将说明 4 . 3 + B S D的网络登录中所 涉及的进程序列。关于这些进程的网络程序设计方面的细节请参阅 S t e v e n s〔1 9 9 0〕。 作为系统起动的一部分, i n i t调用一个s h e l l,使其执行 s h e l l脚本e t c / r c。由此s h e l l脚本起动 一个精灵进程 i n e t d。一旦此s h e l l脚本终止, i n e t d的父进程就变成 i n i t。i n e t d等待T C P / I P连接请 求到达主机,而当一个连接请求到达时,它执行一次 f o r k,然后该子进程执行适当的程序。 我们假定到达了一个对于 T E L N E T服务器的T C P连接请求。T E L N E T是使用T C P协议的远 程登录应用程序。在另一个主机 (它通过某种形式的网络,连接到服务器主机上 )上的用户,或 在同一个主机上的一个用户籍起动T E L N E T客户进程( c l i e n t )起动登录过程: telnet h o s t n a m e 该客户进程打开一个到名为 h o s t n a m e的主机的T C P连接,在h o s t n a m e主机上起动的程序被称为 1 8 2 U N I X环境高级编程 下载
2021-10-19 16:07:12 18.16MB UNIX 环境高级编程 linux
1