files.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Mon, 07 Jun 2010 23:20:47 +0200
changeset 132 54a04f5f141d
parent 131 b5ad49852adc
permissions -rw-r--r--
Adjusted to show side effects and their handling When dealing with static buffers, successive calls point to the same memory location and overwrite formers ones... committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 * files.c
 * Copyright (C) 2008 Markus Broeker
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>

#define  MAXDIRS 1000
#define MAXFILES 1000

#define GETRANDOM(max) (1+(int)((float)(max)*rand()/RAND_MAX+1.0))

char *GetRandomNumberString ()
{
    static char buffer[12];

    sprintf (buffer, "%d", GETRANDOM (65535));

    return buffer;
}

int main (int argc, char **argv)
{
    int i, j;
    int fd;
    char *s;

    if (argc != 2) {
        printf ("Usage: %s <basedir>\n", argv[0]);
        return EXIT_FAILURE;
    }

    if (chdir (argv[1]) == -1) {
        printf ("Initial Chdir to %s failed, aborting...\n", argv[1]);
        return EXIT_FAILURE;
    }

    srand (time (NULL));

    for (i = 0; i < MAXDIRS; i++) {
        s = GetRandomNumberString ();
        mkdir (s, 0777);
        if (chdir (s) == -1) {
            printf ("Chdir to %s failed, aborting\n", s);
            return EXIT_FAILURE;
        }
        for (j = 0; j < MAXFILES; j++) {
            s = GetRandomNumberString ();
            if ((fd = open (s, O_RDWR | O_CREAT, 0666)) < 3) {
                perror ("CREATE");
                return EXIT_FAILURE;
            }
            close (fd);
        }
        if (chdir ("..") == -1)
            break;
    }
    return EXIT_SUCCESS;
}