摘要: 标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。标准I/O提供了三种类型的缓冲:(1)全缓冲。这种情况下,在填满标准I/O缓冲区后才进行实际的I/O操作。对于驻留在磁盘上的文件通常是由标准I/O库实施全缓冲的。在一个流上执行第一次I/O操作时,相关标准I/O函数通常调用malloc获得需使用的缓冲区。术语冲洗(flush)说明标准I/O缓冲区的写操作。缓冲区可由标准I/O例程自动冲洗(例如当填满一个缓冲区时),或者可以调用函数fflush冲洗一个流。值得引起注意的是在UNIX环境中,f 阅读全文
posted @ 2014-01-04 21:20 ITtecman 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 对一个进程预定义了三个流,并且这三个流可以自动地被进程使用,它们是:标准输入、标准输出和标注出错。这些流引用的文件与文件描述符STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO所引用的文件相同。这三个标准I/O流通过预定义文件指针stdin、stdout和stderr加以引用。这三个文件指针同样定义在头文件中。本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。 阅读全文
posted @ 2014-01-04 20:16 ITtecman 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 对于标准I/O库,它们的操作是围绕流(stream)进行的。当用标准I/O库打开或创建一个文件时,我们已使一个流与一个文件相关联。对于ASCII字符集,一个字符用一个字节表示。对于国际字符集,一个字符可以用多个字节表示。标准I/O文件流可用于单字节或多字节(“宽”)字符集。流的定向(stream’s orientation)决定了所读、写的字符是单字节还是多字节。当一个流最初被创建时,它并没有定向。如若在未定向的流上使用一个多字节I/O函数(见),则将该流的定向设置为宽定向的。若在未定向的流上使用一个单字节I/O函数,则将该流的定向设置为字节定向的。只有两个函数可以改变流的定向。freopen 阅读全文
posted @ 2014-01-04 20:11 ITtecman 阅读(812) 评论(0) 推荐(0) 编辑
摘要: 表4-12 文件访问权限位小结常量说明对普通文件的影响对目录的影响S_ISUID S_ISGID设置用户ID 设置组ID执行时设置有效用户ID 若组执行位设置,则执行时设置有效组ID,否则使强制性记录锁起作用(若支持)(不使用) 将在目录中创建的新文件的组ID设置为目录的组ID S_ISVTX粘住位在交换区保存程序正文(若支持)限制在目录中删除和更名文件 S_IRUSR S_IWUSR S_IXUSR用户读 用户写 用户执行许可用户读文件 ... 阅读全文
posted @ 2014-01-04 17:44 ITtecman 阅读(586) 评论(0) 推荐(0) 编辑
摘要: st_dev和st_rdev:每个文件系统所在的存储设备都由主、次设备号表示。设备号所用的数据类型是基本系统数据类型dev_t。主设备号标识设备驱动程序,有时编码为与其通信的外设板;次设备号标识特定的子设备。例如,磁盘驱动器经常包含若干个文件系统。在同一磁盘驱动器上的各文件系统通常具有相同的主设备号,但它们的次设备号却不同。我们通常可以使用两个宏,即major和minor来访问主、次设备号,大多数实现都定义了这两个宏。这就意味着我们无需关心这两个数是如何存放在dev_t对象中的。Linux将宏major和minor定义在头文件中,而该头文件又包括在中。系统中与每个文件名关联st_dev值是文件 阅读全文
posted @ 2014-01-04 17:31 ITtecman 阅读(1394) 评论(0) 推荐(0) 编辑
摘要: 每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜杠开始的路径名为相对路径名)。当用户登录到UNIX系统时,其当前工作目录通常是口令文件(/etc/passwd)中该用户登录项的第6个字段——用户的起始目录(home directory)。当前工作目录是进程的一个属性,起始目录则是登录名的一个属性。进程通过调用chdir或fchdir函数可以更改当前工作目录。#include int chdir( const char *pathname );int fchdir( int filedes );两个函数的返回值:若成功则返回0,若出错则返回-1在这两个函数中,分别用path 阅读全文
posted @ 2014-01-04 16:39 ITtecman 阅读(2791) 评论(0) 推荐(0) 编辑
摘要: 对某个目录具有访问权限的任一用户都可读该目录,但是,为了防止文件系统产生混乱,只有内核才能写目录。一个目录的写权限位和执行权限位决定了在该目录中能否创建新文件以及删除文件,它们并不表示能否写目录本身。#include DIR *opendir( const char *pathname );返回值:若成功则返回指针,若出错则返回NULLstruct dirent *readdir( DIR *dp );返回值:若成功则返回指针,若在目录结尾或出错则返回NULLvoid rewinddir( DIR *dp );int closedir( DIR *dp );返回值:若成功则返回0,若出错则返回 阅读全文
posted @ 2014-01-04 15:18 ITtecman 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 用mkdir函数创建目录,用rmdir函数删除目录。#include int mkdir( const char *pathname, mode_t mode );返回值:若成功则返回0,若出错则返回-1此函数创建一个新的空目录。其中,.和..目录项是自动创建的。所指定的文件访问权限mode由进程的文件模式创建屏蔽字修改。常见的错误时指定与文件相同的mode(只指定读、写权限)。但是,对于目录通常至少要设置1个执行权限位,以允许访问该目录中的文件名。用rmdir函数可以删除一个空目录。空目录是只包含.和..这两项的目录。#include int rmdir( const char *pathn 阅读全文
posted @ 2014-01-04 08:17 ITtecman 阅读(1555) 评论(0) 推荐(0) 编辑