Привет. Это заметка о кодинге в системе Линукс.
Мы разберем написание одной простенькой программы.
Для компилирования программ будем использовать компилятор gcc.
В качестве редактора я взял vi, можешь взять любой, программировать будем в лучших юникс традициях а т.e. в консоли и для консоли =).
Итак, задача у нас довольно проста - нужно вывести список элементов данной директории.
Создаем новый тестовой файл:

$vi /viewdir.c

И начинаем писать код -

#include
#include

int main(int argc,char ** argv)
{
DIR * d;
struct dirent * entry;
if(argc!=2)
{
printf("Использование:%s<директория>\n",argv[0]);
return 0;
}
d=opendir(argv[1]);
if(d==NULL)
{
printf("Ошибочка");
return 1;
}
while(entry=readdir(d))
printf("%s inode=%i\n",entry->d_name,entry->d_ino);
closedir(d);
return 0;
}

Тут мы используем функции opendir,readdir,closedir.
Эти функции работают с дирикторией, как с обычным файлом
Ну а теперь непосредственно код:
Сначало проверяем - если юзер ничего не ввел в качестве параметра, то мы светим ему пример того как нужно пользоваться программой

if(argc!=2)
{
printf("Использование:%s<директория>\n",argv[0]);
return 0;
}

В консоли программа скажет так:

Использование:/home/stranger/dir<директория>

Далее открываем введеную дирикторию
d - можно навать указателем на дирикторию, в дальшешем мы будем с ним работать
Если функция вернула NULL значит произошла ошибка
Потом запускаеться цикл в котором мы читаем список файлов в дириктории с помощью функции ReadDir. Функция readdir() возвращает тру до тех пор пока не будут прочитаны все элементы дириктории. В процессе поисходит вывод информации, которая храниться в структуре entry.
Думаю там все можно понять интуитивно, могу добавить, что inode это номер программы (у нас элементa).
Теперь компилируем

$gcc -o dir /dir.c
$/dir /

и у нас есть список файлов корневого каталога. Но можно зделать проще - ввести команду ls =)

Кстати код можно оформить так:

#include
#include
int main(int argc,char ** argv){
DIR * d;
struct dirent * entry;
if(argc!=2)
{printf("Использование:%s<директория>\n",argv[0]);
return 0;}
d=opendir(argv[1]);
if(d==NULL){printf("Ошибочка");return 1;}
while(entry=readdir(d))
printf("%s inode=%i\n",entry->d_name,entry->d_ino);
closedir(d);
return 0;}

Крис бы от радости обосрался )))

В колонках Карандаш "1000"

©StraNger (27/03/09)