实验二同步与异步write的效率比较
一:实验目的
掌握unix的文件I/O系统调用。
二:要求
1. 实验要求程序必须指定输出的文件名,而该文件是否按同步方式打开,则是可以选择的。因此程序至少带一个,至多两个输入参数。程序默认从标准输入STDIN_FILENO读取输入文件,可以利用shell的输入定向功能选择具体的输入文件。
2. 系统调用times()的说明
#include <sys/times.h>
clock_t times(struct tms *buf);
struct tms {
clock_ttms_utime; /* 记录进程除系统调用外所使用的CPU时间 */
clock_ttms_stime; /* 记录进程的系统调用所使用的CPU时间 */
clock_t tms_cutime; /* 记录子进程除系统调用外所使用的CPU时间 */
clock_t tms_cstime; /* 记录子进程的系统调用所使用的CPU时间 */
};
times函数的返回值是进程迄今为止的存活时间。所有时间都是以“滴答”为单位的,函数sysconf(_SC_CLK_TCK)可获得所运行系统每秒的滴答数(参考课本P33)
三.设计和实现的主要原理、构思、算法、执行过程。
1. 将打开的文件的BUFFSIZE大小的块读入缓冲区,循环执行到全部读完,在每次读的过程中调用write进行写操作。
2, 在每次写之前调用时间函数测量一次时间,之后再调用一次时间函数测量时间,两次时间差就是write的写时间,将其记录就得到了write写整个文件的时间。
3, 每次将BUFFSIZE增大两倍,调用lseek函数使文件偏移量在整体读完一次后返回文件头。
四.具体的程序如下
#include "apue.h"
#include <sys/times.h>
#include <malloc.h>
#include <fcntl.h>