Vous êtes sur la page 1sur 5

Correction de quelques exercices sur la programmation noyau des entres / sorties

Exercice 1 : lecture et affichage dun fichier


int fd;
char buffer[512];
int nb;
main ( int argc,char *argv[] )
{
if ( (fd=open(argv[1],0))<0 )
{
perror ("ouverture impossible");
exit(fd);
}
else
{
nb=read(fd,buffer,512);
while(nb>0)
{
printf("%s",buffer);
nb=read(fd,buffer,512);
}
}
close(fd);
exit(0);}

Exercice 2 : supprimer les caractres entre deux positions de chaque ligne dun fichier
int comp(char *ref,int ent1,int ent2)
{
int fd;
int i=0;
int j=0;
char c;
fd=open(ref,0);
if(fd<0)
{
perror("fichier inexistant\n");
return -1;

}
while((read(fd,&c,1))>0)
{
if(i<ent1)
{
printf("%c",c);
i++;
}
else
{
if(j<(ent2-ent1))
{
j++;
}

else
}

printf("%c",c);

}
printf("\n");
return 0;
close(fd);

}
main(int argc,char *argv[])
{
int n;
n=comp(argv[1],atoi(argv[2]),atoi(argv[3]));
}

Exercice 3 : compter le nombre doccurrence dun caractre dans un fichier


int fd;
int n=0;
char c[1];
int main(int argc,char *argv[])
{
fd=open(argv[1],0);
if(fd==-1)
{
perror("fichier introuvable");
return -1;
}
while(read(fd,c,1)>0)
{
if(c[0]==*argv[2])
n++;
}
close(fd);

printf("le nombre d\'occurence de %c = %d\n",*argv[2],n);


return 0;

Exercice 4 : afficher les lignes dun fichier en ordre inverse en les gardant inchanges
#include <string.h>
int inverse(char *ref)
{
int fd;
char c[1];
char ch[100][256];
int i=0;
int j=0;
int nb;
char a[1];
int l,k;
char nl[1]="\n";

k=0;
fd=open(ref,0);
if(fd<1)
{
perror("fichier inexistant");
return -1;
}
nb=read(fd,c,1);
while(nb>0)
{
ch[i][j]=*c;
if((ch[i][j])=='\n')
{
i++;
j=0;
}
else
{
j++;
}
nb=read(fd,c,1);
}

for(k=i;k>=0;k--)
printf("%s",ch[k]);
close(fd);
return 0;

main(int argc,char *argv[])


{
int n;
n=inverse(argv[1]);
}

Exercice 5 : vrifier si un fichier appartient un utilisateur ou pas


#include <sys/stat.h>
main(int argc,char **argv)
{
uid_t uid;
struct stat buf;
uid=atoi(argv[1]);
if(stat(argv[2],&buf)==0)
{
if(buf.st_uid==uid)
{
printf("appartient \n");
}
else
{
printf("n\'appartient pas\n");
}
}
else

{
}

printf("ouverture de %s impossible\n",argv[2]);

Exercice 6 : copie dun fichier


#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int n;
char c[1];
int f1,f2;
main(int argc,char *argv[])
{
n=0;
f1=open(argv[1],0);
if(f1<0)
{
perror("fichier source nexistant");
exit (f1);
}
f2=open(argv[2],1);
if(f2<0)
{
perror("fichier destin inexistant");
exit (f2);
}
n=read(f1,c,1);
while(n>0)
{
write(f2,c,1);
n=read(f1,c,1);
}
printf("copie terminee\n");
return 0;
close(f1);
close(f2);
}

Exercice 7 : vrifier si un lment est un rpertoire


#include <sys/stat.h>
int catalog(char *ref)
{
struct stat st;
int aux;
if(stat(ref,&st)==-1)

{
perror("erreur");
return 0;
}
aux=(st.st_mode & 0xe000);
if(aux==0x4000)
{
return -1;
}
else
return 0;
}
main(int argc,char *argv[])
{
int n;
n=catalog(argv[1]);
if(n==-1)
printf("%s est un repertoire\n",argv[1]);
else
printf("%s est un fichier\n",argv[1]);
}

Vous aimerez peut-être aussi