Thursday 15 October 2015

File Descriptor

Je suis une formation de "File Descriptor"de JIKEXUEYUAN et j'ai écrit une programmation qui permet de faire copier coller depuis un fichier donné au autre fichier, ceci mes codes:


 Head File:
#ifndef   FILEIO_H
#define  FILEIO_H 
  void copy(int fd_in, int fd_out);  
#endif /*FILEIO_H*/

File filecopy.c#include "fileio.h"
#include <stdio.h>
#include <string.h>
#include <error.h>
#include <fcnlt.h>#include <unistd.h>#define BUFFER_LEN 1024
void copy(int fd_in, int fd_out) 
{    
char buffer[BUFFER_LEN] = {"\0"};    
ssize n ;
 while(n = read(fd_in, buffer, BUFFER_LEN) != 0)     
//read(int fd, char *buffer, size_t count) lire count bytes depuis le descripteur du fichier fd à partir *buffer.    
{        
if(n < 0)        
{            
fprintf(stderr, "read failed. %s\n", strerror(errno));             
//fprintf ici fonction sert à imprimer les infos d'erreur qui sont recuperées par  strerro(errno)        
} else if (n > 0)        
{            
if (write(fd_out, buffer, n) != n)        
 {          
    fprintf(stderr, "write failed. %s\n", strerror(errno));   
   }      
  }  
 } 


File main 
#include "fileio.h"
#include <stdio.h>
#include <string.h>
#include <error.h>
#include <fcnlt.h>
#include <unistd.h>
int main(int argc, char *argv[2]) 
//argc est le nombre d'argument est ajouté dans la main fonction, argv est le contenu d'argument, ici, on va donner le chemin de fichier qui est copié et la destination de fichier copie. 
{  
if (argc < 3) 
//en fait, on transfert deux argument dans ce programme, mais dans ce cas il y a 3 argument, argc[0] est lui même.  
 {      
fprintf(stderr, "argument number error %s\n", strerror(errno) );   
 exit(1); //exit() est dans la bibliotheque de <stdlib.h>  
 }     
int fd_in = open(argv[1], O_RDONLY); 
// fd est définit ici par open      
if(fd_in < 0)    
  {          
fprintf(stderr, "open 1 failed. %s\n", strerror(errno) );       
exit(1);      
}  else { printf("open file %d\n", fd_in); } 

 int fd_out = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644)     if(fd_out < 0)    
{          
fprintf(stderr, "open 2 failed. %s\n", strerror(errno) );         
exit(1);    
  }  else { printf("open file 2: %s\n")} 

copy(fd_in, fd_out);    
close(fd_in);  
close(fd_out); 
return 0;

}

Quand je complie ce programme, ceci les commendes que j'ai saisi:
mkdir bin // bin est un répertoire qui sert à mettre les fichiers temporaire, comme make
gcc -Iinclude mycp.c filecopy.c -o /bin/mycp //compiler
./bin/mycp /etc/passwd ./copypasswd.txt // transférer les arguments





No comments:

Post a Comment