要求:
timewrite <f1 f2 :表示输出文件f2不用O_SYNC 打开。
timewrite f1 sync <f2 :表示输出文件f1用O_SYNC 打开。
#include<fcntl.h>
#include<stdio.h>
#include<time.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(char *argc,char *argv)
{
int from_fd;
int to_fd;
int bytes_read, bytes_write;
char buffer[BUFFER_SIZE];
char *ptr;
if((from_fd = open("../EMC/net_traffic.dat", O_RDONLY | O_SYNC))==-1)
{
printf("open error!\n");
return 0;
}
if((to_fd = open("destination.txt", O_RDONLY | O_WRONLY | O_CREAT ))==-1)
{
printf("destination file open error!\n");
return 0;
}
int seconds = time((time_t*)NULL);
/* 以下代码是一个经典的拷贝文件的代码 */
while (bytes_read = read(from_fd, buffer, BUFFER_SIZE)) {
//printf("11");
/* 一个致命的错误发生了 */
if ((bytes_read == -1) && (errno != EINTR)) break;
else if (bytes_read > 0) {
ptr = buffer;
while (bytes_write = write(to_fd, ptr, bytes_read)) {
/* 一个致命错误发生了 */
if ((bytes_write == -1) && (errno != EINTR))break;
/* 写完了所有读的字节 */
else if (bytes_write == bytes_read) break;
/* 只写了一部分,继续写 */
else if (bytes_write > 0) {
ptr += bytes_write;
bytes_read -= bytes_write;
}
}
/* 写的时候发生的致命错误 */
if (bytes_write == -1)break;
}
}
int seconds1 = time((time_t*)NULL);
printf("----------------------DMA %d\n",seconds1 - seconds);
close(from_fd);
close(to_fd);
if((from_fd = open("../EMC/net_traffic.dat", O_RDONLY ))==-1)
{
printf("open error!\n");
return 0;
}
seconds = time((time_t*)NULL);
/* 以下代码是一个经典的拷贝文件的代码 */
while (bytes_read = read(from_fd, buffer, BUFFER_SIZE)) {
//printf("11");
/* 一个致命的错误发生了 */
if ((bytes_read == -1) && (errno != EINTR)) break;
else if (bytes_read > 0) {
ptr = buffer;
while (bytes_write = write(to_fd, ptr, bytes_read)) {
/* 一个致命错误发生了 */
if ((bytes_write == -1) && (errno != EINTR))break;
/* 写完了所有读的字节 */
else if (bytes_write == bytes_read) break;
/* 只写了一部分,继续写 */
else if (bytes_write > 0) {
ptr += bytes_write;
bytes_read -= bytes_write;
}
}
/* 写的时候发生的致命错误 */
if (bytes_write == -1)break;
}
}
seconds1 = time((time_t*)NULL);
printf("-------------------DIRECTION %d\n",seconds1 - seconds);
close(from_fd);
close(to_fd);
return 1;
}
<pre name="code" class="cpp">运行结果:
----------------------DMA 3
-------------------DIRECTION 0
note:文件名 net_traffic.dat 文件大小 2662423113
Reference:
vim快捷键:http://blog.youkuaiyun.com/donahue_ldz/article/details/17139361http://lveyo.iteye.com/blog/240578
linux下GCC编译C程序(一):http://lveyo.iteye.com/blog/240578
linux c学习笔记-文件的创建与读写(open,read,write):http://lobert.iteye.com/blog/1705861
C语言time()函数:获取当前时间(以秒数表示):http://c.biancheng.net/cpp/html/147.html
结果参考:http://www.cnblogs.com/suzhou/p/5381738.html