2010-08-02 5 views
7

Je veux savoir quel est le temps d'accès. cherché dans le web mais obtenir la même définition (les lectures sont changées). Je sais avec tact que nous pouvons le changer. Quelqu'un pourrait-il m'expliquer plus à ce sujet avec un exemple comment il est changé. Aussi est-il possible de trouver la date et l'heure de création de fichier dans unix?Concernant le temps d'accès unix

Répondre

19

La structure stat(2) garde la trace de toutes la date du fichier/fois:

 struct stat { 
      dev_t  st_dev;  /* ID of device containing file */ 
      ino_t  st_ino;  /* inode number */ 
      mode_t st_mode; /* protection */ 
      nlink_t st_nlink; /* number of hard links */ 
      uid_t  st_uid;  /* user ID of owner */ 
      gid_t  st_gid;  /* group ID of owner */ 
      dev_t  st_rdev; /* device ID (if special file) */ 
      off_t  st_size; /* total size, in bytes */ 
      blksize_t st_blksize; /* blocksize for file system I/O */ 
      blkcnt_t st_blocks; /* number of 512B blocks allocated */ 
      time_t st_atime; /* time of last access */ 
      time_t st_mtime; /* time of last modification */ 
      time_t st_ctime; /* time of last status change */ 
     }; 

st_atime est le accès temps, mis à jour sur read(2) appels (et probablement aussi lorsque open(2) ouvre un fichier pour la lecture) - il n'est PAS mis à jour lorsque les fichiers sont lus via mmap(2). (Ce qui est la raison pour laquelle je suppose open(2) marquera le temps d'accès.)

st_mtime est le données temps de modification, soit par write(2) ou truncate(2) ou open(2) pour l'écriture. (Encore une fois, il est pas mis à jour lorsque les fichiers sont écrits par mmap(2).)

st_ctime est les métadonnées temps de modification: lorsque l'une des autres données dans le struct stat se modifie.

Vous pouvez modifier les horodateurs sur les fichiers avec utime(2):

 struct utimbuf { 
      time_t actime;  /* access time */ 
      time_t modtime;  /* modification time */ 
     }; 

Notez que vous ne pouvez changer le temps d'accès et (données) temps de modification. Vous pouvez définir l'un ou l'autre à des heures arbitraires, mais le ctime sera défini sur l'heure actuelle, car vous avez modifié les métadonnées du fichier.

Il n'y a pas de temps de création dans cette structure, il n'est donc pas possible de savoir quand un fichier a été créé directement à partir du système. Si vous avez vraiment besoin de connaître l'heure de création, vous pouvez la réduire à une plage en regardant vos sauvegardes - en supposant que le fichier qui vous intéresse a été sauvegardé, ainsi que ses métadonnées.

+0

quand j'utiliser l'éditeur vi ou commande de chat ne cette fonction utilise les appels système en lecture. où puis-je trouver la liste des commandes unix qui utilisent les appels système read ou utimes ou mknod – Arav

+1

@arav, 'read (2)' est juste raccourci pour 'read (2)', 'pread (2)', 'readv (2), readdir (2), readlink (2), splice (2), sendfile (2), etc. En d'autres termes, tout ce qui lit le contenu du fichier. Donc, si votre programme a lu un fichier, il peut modifier l'heure d'accès du fichier lu. (Bien sûr, certains systèmes de fichiers désactivent les temps d'accès pour la performance ou la fiabilité.) Si vous voulez trouver des programmes qui utilisent des appels système spécifiques, vous pouvez faire quelque chose comme: 'f/bin/*/usr/bin/*/sbin/*/usr/sbin/*; faire lire -s $ f | grep -q readdir @ GLIBC && echo $ f; done 2>/dev/null' – sarnold

+0

vi ou cat utilise l'appel système read. J'ai essayé mais il ne modifiait pas le temps d'accès – Arav

13
  • dernier accès: heure à laquelle les données du fichier ont été accédées en dernier. Modifié par les appels système mknod (2), utimes (2) et read (2).

  • Dernière modification: Heure de la dernière modification des données du fichier. Modifié par les appels système mknod (2), utimes (2) et write (2). Last changed: Heure à laquelle l'état du fichier a été modifié pour la dernière fois (modification des données inode). Changé par les appels système chmod (2), chown (2), link (2), mknod (2), renommer (2), unlink (2), utimes (2) et write (2).

+0

quand j'utilise l'éditeur vi ou la commande cat cette fonction utilise-t-elle les appels système en lecture. où puis-je trouver la liste des commandes unix qui utilisent les appels système read ou utimes ou mknod – Arav

-3

le temps moyen entre une demande d'information stockée dans un composant particulier tel que le disque dur ou la RAM et sa livraison. De l'autre côté, le temps entre une demande de lecture et le moment où le mot désiré arrive. Par exemple 235 288 unités/13,82 transactions = 16,8 unités par transaction.