read/write函数
调用read函数从打开文件读数据。
#include<unistd.h> ssize_t read( int filedes, void *buf, size_t nbytes);
从 filedes 中读取数据到 buf 中,nbytes 是要求读到的字节数。
返回值:若成功则返回实际读到的字节数,若已到文件尾则返回0,若出错则返回-1。
当从终端设备读时,通常一次最多读一行。
ssize_t 提供带符号的返回值,size_t不带符号。
调用write函数向打开的文件写数据。
#include<unistd.h> ssize_t write (int filedes, const void *buf, size_t nbytes);
从 buf 中写数据到 filedes 中,nbytes 是相求写入的字节数。
返回值:返回值通常与参数 nbytes相同,否则表示出错。
文件描述符 filedes是一个 int型数,通常用文件描述符0与进程的标准输入相关联,文件描述符1与进程的标准输出相关联,文件描述符2与进程的标准出错输出相关联。在依从POSIX的应用程序中,幻数0,1,2应当替换成符号常量 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO。这些常量都定义在头文件<unistd.h>中。
标准输入/输出常量 stdin 和 stdout 定义在头文件 <stdio.h>中,分别表示标准输入和标准输出文件。是指针类型,struct _IO_FILE *
进程终止时,系统会关闭该进程的所有打开的文件描述符,所以程序不用关闭输入和输出文件。
当度量一个进程的执行时间时,unix系统使用三个进程时间值:
- 时钟时间
- 用户cpu时间
- 系统cpu时间
时钟时间是进程运行的时间总量。
用户cpu时间是执行用户指令所用的时间。
系统cpu时间是为该进程执行内核程序所经历的时间。用户cpu时间和系统cpu时间之和常被称为CPU时间。
大多数文件系统为改善其性能都采用某种预读( read ahead)技术。当检测到正进行顺序读取时,系统就试图读入比应用程序所要求的更多数据,并假想应用程序很快就会读这些数据。