単純なテキストファイルを作成し、以下を使用してタイムスタンプを確認しましたstat
。
Pythonスクリプトより前の統計出力
papagolf@Sierra ~/My Files/My Programs/Learning/Python % stat prac09_timestamp.txt
File: prac09_timestamp.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 2485542 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/papagolf) Gid: ( 1001/papagolf)
Access: 2017-09-10 11:10:40.979845492 +0530
Modify: 2017-09-10 11:10:40.979845492 +0530
Change: 2017-09-10 11:10:40.979845492 +0530
Birth: -
その後、読み取りモードでファイルを開くPythonスクリプトを実行しました。 「アクセス」タイムスタンプが変更されると思いましたが、そうではありません。
実行後のPythonスクリプトと統計出力
papagolf@Sierra ~/My Files/My Programs/Learning/Python % cat python prac09_timestamp.py
cat: python: No such file or directory
a = open("prac09_timestamp.txt", "r")
a.close()
papagolf@Sierra ~/My Files/My Programs/Learning/Python % python prac09_timestamp.py
papagolf@Sierra ~/My Files/My Programs/Learning/Python % stat prac09_timestamp.txt
File: prac09_timestamp.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 2485542 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/papagolf) Gid: ( 1001/papagolf)
Access: 2017-09-10 11:10:40.979845492 +0530
Modify: 2017-09-10 11:10:40.979845492 +0530
Change: 2017-09-10 11:10:40.979845492 +0530
Birth: -
しかし、実際にデータを読み取るためにスクリプトを変更すると、タイムスタンプが変更されました。説明してもらえますか?
実行後の新しいPythonスクリプトと統計の出力
papagolf@Sierra ~/My Files/My Programs/Learning/Python % cat prac09_timestamp.py
a = open("prac09_timestamp.txt", "r")
a.readlines()
a.close()
papagolf@Sierra ~/My Files/My Programs/Learning/Python % python prac09_timestamp.py
papagolf@Sierra ~/My Files/My Programs/Learning/Python % stat prac09_timestamp.txt
File: prac09_timestamp.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 2485542 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/papagolf) Gid: ( 1001/papagolf)
Access: 2017-09-10 11:13:12.699848321 +0530
Modify: 2017-09-10 11:10:40.979845492 +0530
Change: 2017-09-10 11:10:40.979845492 +0530
Birth: -
答え1
私はこれがまったくPythonの質問だとは思わない。これはシステムレベルです。このレベルでは、ファイルを開くこととファイルを読むことはまったく異なる作業です。私はLinux内部の専門家ではありませんが、以下はいくつかの基本的な事実です。
- ファイルは次のコマンドで開きます
open()
システムコール。 - ファイルを読み取るときに使用
read()
システムコール open()
システムがアクセス時間を更新しないことを示すフラグがあります。read()
電話したとき。知られているO_NOATIME
- これにより、
open()
アクセス時間自体が更新されないことを推測できます。
何かが欲しいなら使用する権利意味があるという意味です。open()
後で関連ファイルに対していくつかの操作(読み取りおよび/または書き込み)を実行できるファイル記述子を返します。おおよそのたとえ話を使うと、コンサートチケットを持っているのと同じです。あなたが現れて遊び始めるまで、実際に何も訪れたことはありません。 ;)