You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.3 KiB
110 lines
4.3 KiB
/******************************************************************************/
|
|
/* */
|
|
/* Copyright (c) International Business Machines Corp., 2009 */
|
|
/* */
|
|
/* This program is free software; you can redistribute it and/or modify */
|
|
/* it under the terms of the GNU General Public License as published by */
|
|
/* the Free Software Foundation; either version 2 of the License, or */
|
|
/* (at your option) any later version. */
|
|
/* */
|
|
/* This program is distributed in the hope that it will be useful, */
|
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */
|
|
/* the GNU General Public License for more details. */
|
|
/* */
|
|
/* You should have received a copy of the GNU General Public License */
|
|
/* along with this program; if not, write to the Free Software */
|
|
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* File: frag.c */
|
|
/* */
|
|
/* Description: This piece of code creates two files, and writes 1k data to */
|
|
/* each file in a loop from datafile. Loop continues till it */
|
|
/* reaches EOF of data file. In a loop fsync, fclose is called, */
|
|
/* to create fragmented files. */
|
|
/* */
|
|
/* Author: Jyoti Vantagodi jyotiv@linux.vnet.ibm.com */
|
|
/* */
|
|
/* History: Created-Jul 22 2009-Jyoti Vantagodi jyotiv@linux.vnet.ibm.com */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
#include<stdio.h>
|
|
#include<fcntl.h>
|
|
#include<string.h>
|
|
#include<sys/types.h>
|
|
#include<unistd.h>
|
|
|
|
FILE *fp_data; /* File pointer for data file */
|
|
FILE *fp_frag1; /* File pointer for fragmented file 1 */
|
|
FILE *fp_frag2; /* File pointer for fragmented file 2 */
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int bytes_read = 0, bytes_written = 0, fd1 = -1, fd2 = -1;
|
|
char buff[1024], frag_file1[100], frag_file2[100];
|
|
|
|
if (argc != 3) {
|
|
printf("Needs to pass two arguments..\n");
|
|
return -1;
|
|
}
|
|
fp_data = fopen(argv[1], "r");
|
|
if (!fp_data) {
|
|
perror("fopen");
|
|
printf("Error opening datafile \n");
|
|
return 1;
|
|
}
|
|
strcpy(frag_file1, argv[2]);
|
|
strcat(frag_file1, "/frag1");
|
|
|
|
strcpy(frag_file2, argv[2]);
|
|
strcat(frag_file2, "/frag2");
|
|
do {
|
|
fp_frag1 = fopen(frag_file1, "a+");
|
|
if (!fp_frag1) {
|
|
printf("Error opening fragfile \n");
|
|
return -1;
|
|
}
|
|
fp_frag2 = fopen(frag_file2, "a+");
|
|
if (!fp_frag2) {
|
|
perror("fwrite");
|
|
printf("Error opening fragfile \n");
|
|
return -1;
|
|
}
|
|
bytes_read = fread(buff, 1, 1024, fp_data);
|
|
if (bytes_read < 0) {
|
|
perror("fread");
|
|
printf("Error reading data file\n");
|
|
return -1;
|
|
}
|
|
bytes_written = fwrite(buff, 1, bytes_read, fp_frag1);
|
|
if (bytes_read != bytes_written) {
|
|
perror("fwrite");
|
|
printf("Error in writing data\n");
|
|
return -1;
|
|
}
|
|
bytes_written = fwrite(buff, 1, bytes_read, fp_frag2);
|
|
if (bytes_read != bytes_written) {
|
|
perror("fwrite");
|
|
printf("Error in writing data\n");
|
|
return -1;
|
|
}
|
|
fd1 = fileno(fp_frag1);
|
|
fd2 = fileno(fp_frag2);
|
|
|
|
fsync(fd1);
|
|
fsync(fd2);
|
|
fclose(fp_frag1);
|
|
fclose(fp_frag2);
|
|
|
|
if (bytes_read < 1024)
|
|
break;
|
|
} while (1);
|
|
fclose(fp_data);
|
|
return 0;
|
|
}
|