Linux는 읽기 모드에서 파일을 여는 것과 실제로 파일에서 데이터를 읽는 것을 어떻게 구별합니까?

Linux는 읽기 모드에서 파일을 여는 것과 실제로 파일에서 데이터를 읽는 것을 어떻게 구별합니까?

간단한 텍스트 파일을 만들고 다음을 사용하여 타임스탬프를 확인했습니다 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()나중에 관련 파일에 대해 일부 작업(읽기 및/또는 쓰기)을 수행할 수 있는 파일 설명자를 반환합니다. 대략적인 비유를 사용하면 콘서트 티켓을 갖는 것과 같습니다. 당신이 나타나서 놀기 시작할 때까지 실제로 아무 것도 방문한 적이 없습니다. ;)

관련 정보