![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.02.2011
Сообщений: 81
|
![]()
Есть программа на с++ под Linux(ubuntu), которая выводит "информацию о файлах в директории (в текущей по умолчанию или в переданной в качестве аргумента в командной строке) - inode, права доступа, количество ссылок на файл, имя владельца файла, имя группы, размер в байтах, дату и время последней модификации файла, и имя фала. По ключу "-а" так же выводится информация о скрытых файлах", написана не мной, нужно удалить некоторые функции, и привинтить возможность в ручную вводить путь к файлу и определения его свойств. Сделать надо до 12.04.2013.
вот код [cpp] #include <stdio.h> #include <string.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <time.h> void do_ls(char*,char); void dostat(char*,char*); void show_file_info(char*,struct stat*); void mode_to_letters(int,char*); char* uid_to_name(uid_t); char* gid_to_name(gid_t); int main(int ac,char *argv[]){ char a=0; if((ac==2)&&(strcmp(*(argv+1),"-a")==0)){ a=1; *++argv; --ac; } if(ac==1) do_ls((char*)".",a); else{ while (--ac){ printf("\33[36;1m%s: \33[0m\n",*++argv); do_ls(*argv,a); } } return 0; } void do_ls(char *dirname,char a){ DIR *dir_ptr; dirent *direntp; if((dir_ptr=opendir(dirname))==NULL ) fprintf(stderr,"myls:cannot open %s\n",dirname); else{ while((direntp=readdir(dir_ptr))!=N ULL){ if(!a){ if(*(direntp->d_name)!='.'){ printf("%8d ",(int)direntp->d_ino); dostat(direntp->d_name,dirname); } } else{ printf("%8d ",(int)direntp->d_ino); dostat(direntp->d_name,dirname); } } closedir(dir_ptr); } } void dostat(char *filename,char *dirname){ struct stat info; char* way_to_file=new char [strlen(filename)+strlen(dirname)+2]; strcpy(way_to_file,dirname); strcpy(way_to_file+strlen(dirname), "/\0"); strcpy(way_to_file+strlen(way_to_fi le),filename); if(stat(way_to_file,&info)==-1){ printf("Error %s\n",way_to_file); perror(filename); } else show_file_info(filename,&info); delete way_to_file; } void show_file_info(char *filename,struct stat *info_p){ char modestr[11]; mode_to_letters(info_p->st_mode,modestr); printf("%s",modestr); printf("%4d ", (int)info_p->st_nlink); printf("%-8s ",uid_to_name(info_p->st_uid)); printf("%-8s",gid_to_name(info_p->st_gid)); printf("%8ld ",(long)info_p->st_size); printf("%.12s ",4+ctime(&(info_p->st_mtime))); printf("%s\n",filename); } void mode_to_letters(int mode,char *str){ strcpy(str,"----------"); if(S_ISDIR(mode))str[0]='d'; if(S_ISCHR(mode))str[0]='c'; if(S_ISBLK(mode))str[0]='b'; if(mode & S_IRUSR)str[1]='r'; if(mode & S_IWUSR)str[2]='w'; if(mode & S_IXUSR)str[3]='x'; if(mode & S_IRGRP)str[4]='r'; if(mode & S_IWGRP)str[5]='w'; if(mode & S_IXGRP)str[6]='x'; if(mode & S_IROTH)str[7]='r'; if(mode & S_IWOTH)str[8]='w'; if(mode & S_IXOTH)str[9]='x'; } #include <pwd.h> char *uid_to_name(uid_t uid){ struct passwd *getwuid(), *pw_ptr; static char numstr[10]; if((pw_ptr=getpwuid(uid))==NULL){ sprintf(numstr,"%d",uid); return numstr; } else return pw_ptr->pw_name; } #include <grp.h> char *gid_to_name(gid_t gid){ struct group *getgrgid(gid_t), *grp_ptr; static char numstr[10]; if((grp_ptr=getgrgid(gid))==NULL){ sprintf(numstr,"%d",gid); return numstr; } else return grp_ptr->gr_name; } [/cpp] |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 07.10.2008
Сообщений: 213
|
![]()
<-- контакты слева, пишите
|
![]() |
![]() |
![]() |
#3 |
БНТУ ФИТР
Форумчанин
Регистрация: 20.05.2012
Сообщений: 315
|
![]()
пишите - сделаю.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты kventin_zhuk@live.com |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() |
![]() |
![]() |
![]() |
#5 |
БНТУ ФИТР
Форумчанин
Регистрация: 20.05.2012
Сообщений: 315
|
![]()
Заказ взял.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты kventin_zhuk@live.com |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
исполнить тетрады на си под линукс | tarasman11 | Помощь студентам | 0 | 02.05.2013 16:28 |
удаленный фильтр под линукс | Tiva | Фриланс | 0 | 17.09.2012 15:01 |
заставка под линукс | Eyxeniy | Qt и кроссплатформенное программирование С/С++ | 0 | 18.05.2011 20:10 |
асм под линукс | pufystyj | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 14.02.2011 10:22 |