LINUX.ORG.RU

Изменить атрибуты файла


0

0

Добрый день! Вот такой вопрос возник: каким образом можно поменять дату/время какого-нибудь файла? Например fstat заполняет атрибутами определенный буфер, который передается по ссылке этой функции, а вот как можно сделать наоборот - присвоить файлу значения из какого-либо буфера (в данном случае дату/время файла)?

anonymous

ОК, это действительно хорошая вещь, вот только... каким образом формируется time_t? Мастдайные аналоги, например, struct ftime - это по сути дела "поле бит", т.е. unsigned int, в котором первые пять бит - это секунды, вторые шесть - минуты и т.д. А вот, как сформировать time_t, которая передается в структуре utimbuf в функцию utime?

anonymous
()

И каким образом по дискриптору файла (int fd = open("filename.txt", "r");) можно узнать имя файла?

anonymous
()

элементы struct utimebuf хранят информацию в секундах от Epoch.
чтобы эти самые секунды получить из нормальной даты man mktime.
Что касается получения имени из дескриптора ...
Я думаю, что это в принципе невозможно. Т.е. это возможно
с теоретической точки зрения т.к. Linux хранит эту информацию
в структуре dentry в ядре, которая является частью (pointer)структуры file, т.е. такой запрос можно проследить. Но насчет существования
системного вызова я сильно сомневаюсь и вот почему.
В принципе после открытия файл, файл "знают" по i-node ...

#include <stdio.h>
#include <fcntl.h>

int main( void)
{
int fd1, fd2, rc;
char* name = "FILENAME";
char buf[1024];

fd1 = open (name,O_RDWR|O_CREAT|O_TRUNC,0644);
write(fd1,"hello\n",6);
unlink(name);
fd2 = open (name,O_RDWR|O_CREAT,0644);
lseek (fd1,0,SEEK_SET);
rc = read(fd1,buf,sizeof(buf));
printf ("First=%d\n",rc);
rc = read(fd2,buf,sizeof(buf));
printf ("Second=%d\n",rc);

}

Мы получим:

First=6
Second=0

Т.е. это два разных файла ... но с одним именем.
Эту процедуру можно проделать N-e кол-во раз ...
И мы получим N файлов открытых с одним именем, но по сути своей
(i-node number) абсолютно разных.
Этот трюк используют некоторые программы для создания временных
файлов. (open/unlink).



ovsov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.