Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Remarque:
- Les deux derniers write ne sont pas vraiment faux.
- En fait, write renvoie le nombre d'octets écrits
- et -1 en cas d'erreur. Il est cependant préférable
- de faire write(fd, buf, size) < size dans le cas où
- write écrirait une taille inférieure à size sans générer
- d'erreur
- NB: Le premier write est bien faux par contre:
- 1 au lieu de logsize et &argv[i] au lieu de argv[i]
- */
- #include ...
- #include<string.h> // manque un espace
- int write_log(int fd, int len, char **argv){
- int i;
- char newline = '\n';
- for( i = 0 ; i < len ; i++){
- // on doit commencer par i = 2 car
- // le format des commandes est le suivant:
- // NOM DE FICHIER + CHAINES A ECRIRE
- // argv[0] contient le nom du programme
- // et argv[1], celui du fichier à écrire
- int logsize = strlen(argv[i]);
- int j; // variable inutile
- char space = ' ';
- if(write(fd, &argv[i], 1) < 0){
- // if(write(fd, argv[i], logsize)) < logsize
- return -1;
- }
- if(write(fd, &space, 1) < 0){
- // write(fd, &space, 1) < 1
- return -1;
- }
- }
- if(write(fd, &newline, 1) < 0){
- // write(fd, &newline, 1) < 0
- return -1;
- }
- return 0;
- }
- int main(int argc, char **argv){
- int fd;
- struct stat *filestat; // doit etre malloc pour utiliser fstat
- fd = open(argv[1], O_CREAT | O_RDONLY, 0644);
- // pas sur que argv[1] existe -> risque de segfault
- // on ouvre en read only or, on ne fait que écrire.
- // il fallait utiliser O_WONLY
- if(lseek(fd, filestat->st_size, SEEK_SET) < 0){
- // on peut s'interroger sur l'utilité de ce bloc de code
- // vu que l'ouverture du fichier se fait toujours en partant
- // du début je pense en mode O_CREAT
- perror("Error with lseek: ");
- close(fd);
- exit(EXIT_FAILURE);
- }
- if(write_log(fd, argc, argv)){
- // il n'est pas logique de faire if(a) pour vérifier
- // si a a échoué.
- // if(write_log(fd, argc, argv)) == -1 aurait été
- // plus logique à utiliser bien que le code actuel fonctionne ..
- close(fd);
- perror("write_log failed: ");
- exit(EXIT_FAILURE);
- }
- close(fd);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement