stella_650
27-06-2008, 08:27
Buongiorno a tutti,
avrei bisogno di un aiuto per un problema sui file in unix da risolvere con un programma C.
Mi si chiede di scrivere un programma in C che esamini il contenuto della directory corrente, verificando per ogni file regolare se la sua estensione è .c. In questo caso, verificarne i permessi di scrittura per il gruppo e visualizzare sullo standard output il contenuto del secondo file di lunghezza minore.
Il programma che ho scritto arriva al punto di visualizzare il contenuto del file di lunghezza minore ( il + piccolo), come faccio a prendere il secondo più piccolo?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char *argv[])
{
char cwd[100],nomefile[255],buffer[4096];
DIR *dp;
struct stat st;
int i,nr,fd,lenfile,lenmin=100;
struct dirent *drn;
getcwd(cwd,sizeof(cwd));
if((dp=opendir(cwd))!=NULL)
{
while((drn=readdir(dp))!=NULL)
{
stat(drn->d_name,&st);
if(S_ISREG(st.st_mode))
{
if(strstr(drn->d_name,".c"))
{
if(st.st_mode & S_IWGRP)
printf("File %s ha il permesso di scrittura per il gruppo\n",drn->d_name);
else
printf("File non avente permesso di scrittura per il gruppo\n");
lenfile=strlen(drn->d_name);
if(lenmin>lenfile)
{
strcpy(nomefile,drn->d_name);
lenmin=lenfile;
}
}
}
}
printf("File %s di lunghezza minima %d\n",nomefile,lenmin);
fd=open(nomefile,O_RDONLY);
nr=read(fd,buffer,sizeof(buffer));
write(fd,buffer,nr);
printf("Il contenuto di nomefile buffer è %s\n",buffer);
}
closedir(dp);
exit(0);
}
avrei bisogno di un aiuto per un problema sui file in unix da risolvere con un programma C.
Mi si chiede di scrivere un programma in C che esamini il contenuto della directory corrente, verificando per ogni file regolare se la sua estensione è .c. In questo caso, verificarne i permessi di scrittura per il gruppo e visualizzare sullo standard output il contenuto del secondo file di lunghezza minore.
Il programma che ho scritto arriva al punto di visualizzare il contenuto del file di lunghezza minore ( il + piccolo), come faccio a prendere il secondo più piccolo?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char *argv[])
{
char cwd[100],nomefile[255],buffer[4096];
DIR *dp;
struct stat st;
int i,nr,fd,lenfile,lenmin=100;
struct dirent *drn;
getcwd(cwd,sizeof(cwd));
if((dp=opendir(cwd))!=NULL)
{
while((drn=readdir(dp))!=NULL)
{
stat(drn->d_name,&st);
if(S_ISREG(st.st_mode))
{
if(strstr(drn->d_name,".c"))
{
if(st.st_mode & S_IWGRP)
printf("File %s ha il permesso di scrittura per il gruppo\n",drn->d_name);
else
printf("File non avente permesso di scrittura per il gruppo\n");
lenfile=strlen(drn->d_name);
if(lenmin>lenfile)
{
strcpy(nomefile,drn->d_name);
lenmin=lenfile;
}
}
}
}
printf("File %s di lunghezza minima %d\n",nomefile,lenmin);
fd=open(nomefile,O_RDONLY);
nr=read(fd,buffer,sizeof(buffer));
write(fd,buffer,nr);
printf("Il contenuto di nomefile buffer è %s\n",buffer);
}
closedir(dp);
exit(0);
}