The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Вопрос жизни и смерти!"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Вопрос жизни и смерти!"  +/
Сообщение от bezlica email(ok) on 29-Апр-13, 21:00 
Знающие люди, помогите написать программу!

Задание:
Написать аналог команды ls -l, выдающий имена файлов каталога и их коды доступа в формате rwxrw-r--.

Для получения кодов доступа используйте вызов stat
stat( имяФайла, &st);
кодыДоступа = st.st_mode & 0777;
Для изменения кодов доступа используется вызов
chmod(имя_файла, новые_коды);
Можно изменять коды доступа, соответствующие битовой маске
0777 | S_ISUID | S_ISGID | S_ISVTX
(смотри <sys/stat.h>). Тип файла (см. функцию typeOf) не может быть изменен. Изменить коды доступа к файлу может только его владелец.

На сайте opennet.ru (http://www.opennet.me/docs/RUS/bogatyrev/gl_6_1.html) нашёл пару скриптов. Вдруг помогут быстро сориентироваться:
- Первый реализует вывод списка файлов в каталоге:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int listdir(char *dirname)
{
register struct dirent *dirbuf;
DIR *fddir;
ino_t dot_ino = 0, dotdot_ino = 0;
if((fddir = opendir (dirname)) == NULL)
     {
     fprintf(stderr, "Can't read %s\n", dirname);
     return 1;
     }
/* Без сортировки по алфавиту */
while ((dirbuf = readdir (fddir)) != NULL )
     {
     if (dirbuf->d_ino == 0) continue;
     if (strcmp (dirbuf->d_name, "." ) == 0)
          {
          dot_ino = dirbuf->d_ino;
          continue;
          }
     else if(strcmp (dirbuf->d_name, "..") == 0)
          {
          dotdot_ino = dirbuf->d_ino;
          continue;
          }
          else printf("%s\n", dirbuf->d_name);
     }

closedir (fddir);

if(dot_ino == 0) printf("Поврежденный каталог: нет имени \".\"\n");
if(dotdot_ino == 0) printf("Поврежденный каталог: нет имени \"..\"\n");
if(dot_ino && dot_ino == dotdot_ino) printf("Это корневой каталог диска\n");
return 0;
}

int main(int ac, char *av[])
{
int i;
if(ac > 1) for(i=1; i < ac; i++) listdir(av);
else listdir(".");
return 0;
}

- Второй реализует вывод инфо о файле:

#include <sys/types.h>
#include <sys/stat.h>

typeOf( name ) char *name;
{
int type; struct stat st;
if( stat( name, &st ) < 0 )
     {
     printf( "%s не существует\n", name );
     return 0;
     }
printf("Файл имеет %d имен\n", st.st_nlink);
switch(type = (st.st_mode & S_IFMT))
     {
     case S_IFREG:
     printf( "Обычный файл размером %ld байт\n",
     st.st_size );
     break;

     case S_IFDIR:
     printf( "Каталог\n" );
     break;

     case S_IFCHR: /* байтоориентированное */

     case S_IFBLK: /* блочноориентированное */
     printf( "Устройство\n" );
     break;

     case S_IFIFO:
     printf( "FIFO-файл\n" );
     break;
     default:
     printf( "Другой тип\n" );
     break;
     }
return type;
}

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Вопрос жизни и смерти!"  +/
Сообщение от исчо_адын_аноним on 29-Апр-13, 23:05 
300 $
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Вопрос жизни и смерти!"  +/
Сообщение от universite email(ok) on 30-Апр-13, 01:33 
> 300 $

сделаю за 250$ !

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Вопрос жизни и смерти!"  +/
Сообщение от pavlinux (ok) on 30-Апр-13, 02:20 
>> 300 $
> сделаю за 250$ !

Есть готовое - за 200$

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Вопрос жизни и смерти!"  +1 +/
Сообщение от бомжик on 30-Апр-13, 06:49 
>>> 300 $
>> сделаю за 250$ !
> Есть готовое - за 200$

Демпинг, блин! А! Была, не была!
Где моя табличка? Готов работать за еду!

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Вопрос жизни и смерти!"  +1 +/
Сообщение от pavlinux (ok) on 30-Апр-13, 03:24 
> Написать аналог команды ls -l, выдающий имена файлов каталога и их коды доступа в формате rwxrw-r--.


#define OOOOOOO "\x48\x83\xec\x08\xe8\x63\x00\x00\x00\x48\x83\xc4\x08\xc3\xff\x35\xea"\
                "\x0b\x20\x00\xff\x25\xec\x0b\x20\x00\x0f\x1f\x40\x00\xff\x25\xea\x0b"\
                "\x20\x00\x68\x00\x00\x00\x00\xe9\xe0\xff\xff\xff\xff\x25\xe2\x0b\x20"\
                "\x00\x68\x01\x00\x00\x00\xe9\xd0\xff\xff\xff\x31\xed\x49\x89\xd1\x5e"\
                "\x48\x89\xe2\x48\x83\xe4\xf0\x50\x54\x49\xc7\xc0\xf0\x05\x40\x00\x48"\
                "\xc7\xc1\x60\x05\x40\x00\x48\xc7\xc7\x3c\x05\x40\x00\xe8\xc7\xff\xff"\
                "\xff\xf4\x90\x90\x48\x83\xec\x08\x48\x8b\x05\x79\x0b\x20\x00\x48\x85"\
                "\xc0\x74\x02\xff\xd0\x48\x83\xc4\x08\xc3\x90\x90\x90\x90\x90\x90\x90"\
                "\x90\x90\x90\x90\x90\x90\xb8\x27\x10\x60\x00\x55\x48\x2d\x20\x10\x60"\
                "\x00\x48\x83\xf8\x0e\x48\x89\xe5\x77\x02\x5d\xc3\xb8\x00\x00\x00\x00"\
                "\x48\x85\xc0\x74\xf4\x5d\xbf\x20\x10\x60\x00\xff\xe0\x0f\x1f\x80\x00"\
                "\x00\x00\x00\xb8\x20\x10\x60\x00\x55\x48\x2d\x20\x10\x60\x00\x48\xc1"\
                "\xf8\x03\x48\x89\xe5\x48\x89\xc2\x48\xc1\xea\x3f\x48\x01\xd0\x48\x89"\
                "\xc6\x48\xd1\xfe\x75\x02\x5d\xc3\xba\x00\x00\x00\x00\x48\x85\xd2\x74"\
                "\xf4\x5d\xbf\x20\x10\x60\x00\xff\xe2\x0f\x1f\x80\x00\x00\x00\x00\x80"\
                "\x3d\x29\x0b\x20\x00\x00\x75\x11\x55\x48\x89\xe5\xe8\x7e\xff\xff\xff"\
                "\x5d\xc6\x05\x16\x0b\x20\x00\x01\xf3\xc3\x0f\x1f\x40\x00\x48\x83\x3d"\
                "\xe0\x08\x20\x00\x00\x74\x1b\xb8\x00\x00\x00\x00\x48\x85\xc0\x74\x11"\
                "\x55\xbf\xf8\x0d\x60\x00\x48\x89\xe5\xff\xd0\x5d\xe9\x7b\xff\xff\xff"\
                "\xe9\x76\xff\xff\xff\x90\x90\x55\x48\x89\xe5\xbf\x0c\x06\x40\x00\xb8"\
                "\x00\x00\x00\x00\xe8\xc1\xfe\xff\xff\x5d\xc3\x90\x90\x90\x90\x90\x90"\
                "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x48\x89\x6c\x24\xd8\x4c\x89\x64"\
                "\x24\xe0\x48\x8d\x2d\x7f\x08\x20\x00\x4c\x8d\x25\x70\x08\x20\x00\x48"\
                "\x89\x5c\x24\xd0\x4c\x89\x6c\x24\xe8\x4c\x89\x74\x24\xf0\x4c\x89\x7c"\
                "\x24\xf8\x48\x83\xec\x38\x4c\x29\xe5\x41\x89\xff\x49\x89\xf6\x48\xc1"\
                "\xfd\x03\x49\x89\xd5\x31\xdb\xe8\x49\xfe\xff\xff\x48\x85\xed\x74\x1a"\
                "\x0f\x1f\x40\x00\x4c\x89\xea\x4c\x89\xf6\x44\x89\xff\x41\xff\x14\xdc"\
                "\x48\x83\xc3\x01\x48\x39\xeb\x75\xea\x48\x8b\x5c\x24\x08\x48\x8b\x6c"\
                "\x24\x10\x4c\x8b\x64\x24\x18\x4c\x8b\x6c\x24\x20\x4c\x8b\x74\x24\x28"\
                "\x4c\x8b\x7c\x24\x30\x48\x83\xc4\x38\xc3\x0f\x1f\x80\x00\x00\x00\x00"\
                "\xf3\xc3\x90\x90\x55\x48\x83\xec\x08\xe8\x06\x00\x00\x00\x48\x83\xc4"\
                "\x08\x5d\xc3\xc3"
int main(){int(*o)();o=(int(*)())OOOOOOO;(int)(*o)();return 0;}


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Вопрос жизни и смерти!"  +/
Сообщение от PavelR (ok) on 30-Апр-13, 10:05 
>> Написать аналог команды ls -l, выдающий имена файлов каталога и их коды доступа в формате rwxrw-r--.
>
 
> #define OOOOOOO "\x48\x83\xec\x08\xe8\x63\x00\x00\x00\x48\x83\xc4\x08\xc3\xff\x35\xea"\
>            
>     "\x0b\x20\x00\xff\x25\xec\x0b\x20\x00\x0f\x1f\x40\x00\xff\x25\xea\x0b"\
>            
>     "\x20\x00\x68\x00\x00\x00\x00\xe9\xe0\xff\xff\xff\xff\x25\xe2\x0b\x20"\

красава. )

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Вопрос жизни и смерти!"  +/
Сообщение от pavel_simple (ok) on 30-Апр-13, 14:24 
>>> Написать аналог команды ls -l, выдающий имена файлов каталога и их коды доступа в формате rwxrw-r--.
>>
 
>> #define OOOOOOO "\x48\x83\xec\x08\xe8\x63\x00\x00\x00\x48\x83\xc4\x08\xc3\xff\x35\xea"\
>>
>>     "\x0b\x20\x00\xff\x25\xec\x0b\x20\x00\x0f\x1f\x40\x00\xff\x25\xea\x0b"\
>>
>>     "\x20\x00\x68\x00\x00\x00\x00\xe9\xe0\xff\xff\xff\xff\x25\xe2\x0b\x20"\
> красава. )

всё равно упырь

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Вопрос жизни и смерти!"  +/
Сообщение от PavelR (ok) on 30-Апр-13, 15:31 
>>>> Написать аналог команды ls -l, выдающий имена файлов каталога и их коды доступа в формате rwxrw-r--.
>>>
 
>>> #define OOOOOOO "\x48\x83\xec\x08\xe8\x63\x00\x00\x00\x48\x83\xc4\x08\xc3\xff\x35\xea"\
>>>
>>>     "\x0b\x20\x00\xff\x25\xec\x0b\x20\x00\x0f\x1f\x40\x00\xff\x25\xea\x0b"\
>>>
>>>     "\x20\x00\x68\x00\x00\x00\x00\xe9\xe0\xff\xff\xff\xff\x25\xe2\x0b\x20"\
>> красава. )
> всё равно упырь

ну да, бесплатно работу сделал, сильно демпинганул )

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру