summaryrefslogtreecommitdiffstats
path: root/c_pgms/create.c
diff options
context:
space:
mode:
Diffstat (limited to 'c_pgms/create.c')
-rw-r--r--c_pgms/create.c132
1 files changed, 73 insertions, 59 deletions
diff --git a/c_pgms/create.c b/c_pgms/create.c
index e377a92..ea08e8a 100644
--- a/c_pgms/create.c
+++ b/c_pgms/create.c
@@ -10,6 +10,21 @@
#include <sys/time.h>
#include <sys/resource.h>
+#define do_file_ops(type) { \
+ mkdir (dirname_##type,0755); \
+ strcat(entries_dir_path,dirname_##type); \
+ create_##type(dirname_##type,num); \
+ rmdir(dirname_##type); \
+}
+
+#define chk_working_dir(path) { \
+ if(NULL == path) { \
+ fprintf(stderr, "getcwd failed (%s)\n", strerror(errno)); \
+ return 255; \
+ } \
+}
+
+
double timeval_elapsed(struct timeval *tv1, struct timeval *tv2);
double timeval_elapsed(struct timeval *tv1, struct timeval *tv2)
@@ -18,7 +33,8 @@ double timeval_elapsed(struct timeval *tv1, struct timeval *tv2)
(tv2->tv_usec - tv1->tv_usec) * 1.0e-6;
}
-/* This function sets the limit on maximum number of open files. By default it is set to 1024.This function raises that limit*/
+/* This function sets the limit on maximum number of open files.
+ By default it is set to 1024.This function raises that limit*/
int ulimit_unlimited()
{
@@ -51,12 +67,14 @@ int create_block_special_file(char *dir, int n)
char name[4096];
char remove_name[4096];
int i;
-
+
gettimeofday(&before,NULL);
-
+
for ( i = 0; i < n; i++ ) {
sprintf(name,"%s/%s.%d", dir, "dev", i);
- dev = makedev(2,2 ); /* creates a device with given major and minor numbers and returns a structure of type dev_t */
+ dev = makedev(2,2);
+ /* creates a device with given major and minor numbers
+ and returns a structure of type dev_t */
mknod_ret = mknod(name,S_IFBLK|0644,dev);
if(mknod_ret) {
@@ -64,14 +82,14 @@ int create_block_special_file(char *dir, int n)
fprintf(stderr,"%s:Creating device file %s failed\n",
strerror(errno),name);
exit(err);
- }
+ }
}
-
+
gettimeofday(&after,NULL);
-
+
create = timeval_elapsed(&before,&after) * 1e6 / n;
printf("Time to create block device special file is %.01f us\n",create);
-
+
for ( i = 0; i < n; i++ ) {
sprintf(remove_name,"%s/%s.%d", dir, "dev", i);
unlink(remove_name);
@@ -79,7 +97,7 @@ int create_block_special_file(char *dir, int n)
return 0;
}
-
+
int create_directory(char *dirname, int n)
{
@@ -90,9 +108,9 @@ int create_directory(char *dirname, int n)
int err;
int i;
struct timeval before, after;
-
+
gettimeofday(&before,NULL);
-
+
for ( i = 1; i < n; i++ ) {
sprintf(name,"%s/%s.%d", dirname, "dir", i);
makedir_ret = mkdir(name,0755);
@@ -102,24 +120,24 @@ int create_directory(char *dirname, int n)
strerror(errno),name);
exit(err);
}
-
+
}
-
+
gettimeofday(&after,NULL);
create = timeval_elapsed(&before,&after) * 1e6 / n;
printf("Time to create directory is %.01f us\n",create);
-
+
for ( i = 0; i < n; i++) {
sprintf(rmdir_name,"%s/%s.%d", dirname, "dir", i);
rmdir(rmdir_name);
}
-
+
return 0;
}
-int create_character_special_file(char *dir, int n)
+int create_char_special_file(char *dir, int n)
{
int mknod_ret;
int err;
@@ -129,12 +147,14 @@ int create_character_special_file(char *dir, int n)
char name[4096];
char remove_name[4096];
int i;
-
+
gettimeofday(&before,NULL);
-
+
for ( i = 0; i < n; i++ ) {
sprintf(name,"%s/%s.%d", dir, "chr", i);
- dev = makedev(2,2); /* creates a device with given major and minor numbers and returns a structure of type dev_t */
+ dev = makedev(2,2);
+ /* creates a device with given major and minor numbers
+ and returns a structure of type dev_t */
mknod_ret = mknod(name,S_IFCHR|0644,dev);
if(mknod_ret) {
@@ -142,20 +162,20 @@ int create_character_special_file(char *dir, int n)
fprintf(stderr,"%s:Creating device file %s failed\n",
strerror(errno),name);
exit(err);
- }
-
+ }
+
}
-
+
gettimeofday(&after,NULL);
-
+
create = timeval_elapsed(&before,&after) * 1e6 / n;
printf("Time to create character special file is %.01f us\n",create);
-
+
for ( i = 0; i < n; i++ ) {
sprintf(remove_name,"%s/%s.%d", dir, "chr", i);
unlink(remove_name);
}
-
+
return 0;
}
@@ -169,9 +189,9 @@ int create_pipe(char *dirname, int n)
double create_pipe;
int i;
int ret;
-
+
gettimeofday(&before,NULL);
-
+
for ( i = 0; i < n ; i++) {
sprintf(pipe_name,"%s/%s.%d", dirname, "pipe", i);
ret = mkfifo(pipe_name, 0644);
@@ -184,15 +204,15 @@ int create_pipe(char *dirname, int n)
}
gettimeofday(&after,NULL);
-
+
create_pipe = timeval_elapsed(&before,&after) * 1e6 / n;
printf("Time to create a pipe is %.01f us\n", create_pipe);
-
+
for ( i = 0; i < n; i++) {
sprintf(pipe_name,"%s/%s.%d", dirname, "pipe", i);
unlink(pipe_name);
}
-
+
return 0;
}
@@ -205,9 +225,9 @@ int create_regular_file(char *dirname, int n)
double create_file;
int i;
int ret;
-
+
gettimeofday(&before,NULL);
-
+
for ( i = 0; i < n ; i++) {
sprintf(file_name,"%s/%s.%d", dirname, "file", i);
ret = open(file_name, O_CREAT|O_RDWR,0600);
@@ -218,17 +238,17 @@ int create_regular_file(char *dirname, int n)
exit(err);
}
}
-
+
gettimeofday(&after,NULL);
-
+
create_file = timeval_elapsed(&before,&after) * 1e6 / n;
printf("Time to create a regular file is %.01f us\n", create_file);
-
+
for ( i = 0; i < n; i++) {
sprintf(file_name,"%s/%s.%d", dirname, "file", i);
unlink(file_name);
}
-
+
return 0;
}
@@ -239,52 +259,46 @@ int main(int argc, char **argv)
int err;
int num = 1000;
char *dir = ".";
- char *dirname = "block_dir";
- char *dirname_char = "char_dir";
+ char *dirname_block_special_file = "block_dir";
+ char *dirname_char_special_file = "char_dir";
char *dirname_pipe = "pipe_dir";
char *dirname_regular_file = "file_dir";
- char *entries_dir_path;
+ char *entries_dir_path = NULL;
if(argv[1])
num = atoi(argv[1]);
-
+
printf("%d\n",num);
if ( ulimit_unlimited() == -1 ) {
fprintf(stderr, "%s:ulimit failed going with default value, Setting %d to 1000\n",
strerror(errno),num);
num = 1000;
}
- /* Creating 1000 block special files and calculating the time needed for it */
+ /* Creating 1000 block special files and
+ calculating the time needed for it */
entries_dir_path = getcwd(entries_dir_path,255);
- mkdir (dirname,0755);
- strcat(entries_dir_path,dirname);
- create_block_special_file(dirname,num);
- rmdir(dirname);
+ chk_working_dir(entries_dir_path);
+ do_file_ops(block_special_file);
- /* Creating 1000 cgaracter special files and calculating the time needed for it */
+ /* Creating 1000 character special files and
+ calculating the time needed for it */
entries_dir_path = getcwd(entries_dir_path,255);
- mkdir (dirname_char,0755);
- strcat(entries_dir_path,dirname_char);
- create_character_special_file(dirname_char,num);
- rmdir(dirname_char);
+ chk_working_dir(entries_dir_path);
+ do_file_ops(char_special_file);
/*Creating 1000 directories and calculating the time needed for it */
create_directory(dir,num);
/* Creating 1000 files and calculating the time needed for it */
entries_dir_path = getcwd(entries_dir_path,255);
- mkdir (dirname_pipe,0755);
- strcat(entries_dir_path,dirname_pipe);
- create_pipe(dirname_pipe,num);
- rmdir(dirname_pipe);
+ chk_working_dir(entries_dir_path);
+ do_file_ops(pipe);
/* Creating 1000 regular files and calculating the time needed for it */
entries_dir_path = getcwd(entries_dir_path,255);
- mkdir (dirname_regular_file,0755);
- strcat(entries_dir_path,dirname_regular_file);
- create_regular_file(dirname_regular_file,num);
- rmdir(dirname_regular_file);
-
+ chk_working_dir(entries_dir_path);
+ do_file_ops(regular_file);
+
return 0;
}