Помогите пожалуйста! учусь на юриста, а задали программу для Linux написать!
Напишите программу удаления файлов и каталогов, заданных в argv. Делайте системный вызов stat, чтобы определить тип файла (файл/каталог). Программа должна отказываться удалять файлы устройств. Для удаления пустого каталога (не содержащего иных имен, кроме "." и "..") следует использовать системный вызов
rmdir(имя_каталога);
(если каталог не пуст - errno получит значение EEXIST); а для удаления обычных файлов (не каталогов)
unlink(имя_файла);
Программа должна запрашивать подтверждение на удаление каждого файла, выдавая его имя, тип, размер в килобайтах и вопрос "удалить ?".
Спасибо, я на связи!!
Программа удаления файлов и каталогов, заданных в argv
учусь на юриста, а задали программу для Linux написать!
и что же за такой предмет, что юристам под линукс кодить приходится? wink
ну а что, быстро и просто)))
факультет управления, права и информатики, предмет Сист.Програмн.Обеспечения..
Случаем не институт имени Жмента? :lol:
ну а что, быстро и просто)))
за такое "быстро и просто" предупреждения дают.
Не, Мфюа))
спасибо, я просто не знаю, как иначе))
Makarova,
До вечера терпит? Смогу написать только после семи по Москве. Сейчас занят.
Спасибо большое, я в личку вам отвечу. После 20-00 буду здесь.
Короче, вот Вам исходники, пробуйте. У меня в первом приближении все работает
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>
long FileSize(char *file)
{
long curpos, length;
FILE *stream = fopen(file, "r");
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
void deldir(char *dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
long filesize = 0;
if((dp = opendir(dir)) == NULL)
{
fprintf(stderr, "Can not open directory: %s\n", dir);
return;
}
chdir(dir);
while((entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
if(S_ISDIR(statbuf.st_mode))
{
if(strcmp(".", entry->d_name) == 0 ||
strcmp("..", entry->d_name) == 0)
continue;
deldir(entry->d_name, depth + 4);
}
else
{
if(S_ISBLK(statbuf.st_mode)||S_ISCHR(statbuf.st_mode))
continue;
else
{
filesize = FileSize(entry->d_name);
printf("\n File '%s' size: %d: Do you want to delete it (Y/N?)", entry->d_name, filesize);
int ch = getchar();
if((ch == 'Y') || (ch == 'y'))
{
getchar();
unlink(entry->d_name);
fflush(stdin);
}
else
{
chdir("..");
closedir(dp);
return;
}
}
}
}
chdir("..");
rmdir(dir);
closedir(dp);
}
int
main (int argc, char **argv)
{
char topdir[] = ".";
if(argc >= 2)
{
for(int i = 1; i < argc; i++)
{
deldir(argv[i], 0);
}
}
return 0;
}
Спасибо большое, Hvzh!!! Завтра после 11 вечера сразу попробую!! сообщите пожалуйста инфо, которое я попросила у Вас в ЛС!!!