Привет. Это заметка о кодинге в системе Линукс.
Мы разберем написание одной простенькой программы.
Для компилирования программ будем использовать компилятор 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)
Небольной пример на тему программирование в Linux
Подписаться на:
Комментарии к сообщению (Atom)
10 мая 2009 г. в 12:55
очень полезно, спасибо))))