Copier un fichier, log des actions [gcc]

Description

(Screenshot de la version précédante)

Mon premier programme en c, dans Linux
Il ne fait pas grand choses...
Il permet de copier un fichier vers un autre.
Il place également les actions dans un fichier log.

Source / Exemple :


================
main.c
================

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
| file cloner                                                     |
|                                                                 |
| Program that copies one file to another.                        |
|                                                                 |
| Version 0.2                                                     |
|                                                                 |
| Files: main.c*                                                  |
|        copy.c                                                   |
|        log.c                                                    |
|                                                                 |
| Last modification: 27.08.2003                                   |
|                                                                 |
|     Author: frzburn                                             |
|     E-mail: frzburn@mindless.com                                |
|                                                                 |
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>

/* Functions prototypes */
void log(char *loginfo, char *logxinfo);
void copy(char *file_in, char *file_out);

int main(int argc, char *argv[])
{
  char file_in[28];
  char file_out[28];

  /* Sends information to log() */
  log("Program started", "");

  /* Reads input and output file from user */
  printf("Enter input file: ");
  scanf("%s", file_in);
  printf("Enter output file: ");
  scanf("%s", file_out);

  /* Calls copy() function, then sends
     information to log() */
  copy(file_in, file_out);
  log("File copied -> ", file_in);

  /* Sends information to log() */
  log("Program exited", "" );

return(0);
}

================
log.c
================

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
| file cloner                                                     |
|                                                                 |
| Program that copies one file to another.                        |
|                                                                 |
| Version 0.2                                                     |
|                                                                 |
| Files: main.c                                                   |
|        copy.c                                                   |
|        log.c*                                                   |
|                                                                 |
| Last modification: 27.08.2003                                   |
|                                                                 |
|     Author: frzburn                                             |
|     E-mail: frzburn@mindless.com                                |
|                                                                 |
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void log(char *loginfo, char *logxinfo)
{
  struct tm *tm_ptr;
  time_t the_time;
  char buf[256];

  (void) time(&the_time);
  tm_ptr = localtime(&the_time);
  strftime(buf, 256, "%b %d %H:%M:%S", tm_ptr);

  /* Sends time and date to the logfile */
  FILE *logfile;
  logfile = fopen("logfile.log", "a");
  fprintf(logfile, "%s - %s%s\n", buf, loginfo, logxinfo);
  fclose(logfile);
}

================
copy.c
================

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
| file cloner                                                     |
|                                                                 |
| Program that copies one file to another.                        |
|                                                                 |
| Version 0.2                                                     |
|                                                                 |
| Files: main.c                                                   |
|        copy.c*                                                  |
|        log.c                                                    |
|                                                                 |
| Last modification: 27.08.2003                                   |
|                                                                 |
|     Author: frzburn                                             |
|     E-mail: frzburn@mindless.com                                |
|                                                                 |
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>
#include <stdlib.h>

void copy(char *file_in, char *file_out)
{
  int c;
  FILE *in, *out;

  /* Copies the file */
  in = fopen(file_in,"r");
  out = fopen(file_out,"w");

  while((c = fgetc(in)) != EOF)
    fputc(c,out);
}

================
Makefile
================

all: fc

# Wich compiler
CC = gcc

# Where are include files kept
INCLUDE = .

# Options for development
CFLAGS = -g -Wall -ansi

# Options for release
# CFLAGS = -o -Wall -ansi

t2000: main.o log.o copy.o
	$(CC) -o fc main.o log.o copy.o

main.o: main.c log.c copy.c
	$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c

log.o: main.c copy.c
	$(CC) -I$(INCLUDE) $(CFLAGS) -c log.c

copy.o: main.c log.c
	$(CC) -I$(INCLUDE) $(CFLAGS) -c copy.c

Conclusion :


Je ne sais pas si mon programme marche dans MS Windows, ne ne l'ai pas encore testé.
Peut-être que la fonction time causerait problème. Surtout pour le fichier log...

Pour compiler:
J'ai remplacer mon vieux script comp par un Makefile. Alors il vous suffit de taper make.

En tant que programmeur débutant, je suis ouvert à toutes suggestions.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.