2014-04-19 2 views
4

알려진 파일 기술자가있는 열린 파일이있는 경우 fstat()을 사용하면 어떤 이점이 있습니까? stat()입니까? 왜 한 가지 기능 만 있지 않습니까?fstat()와 stat()의 장점은 무엇입니까?

int fstat(int fildes, struct stat *buf) 

int stat(const char *path, struct stat *buf) 
+0

파일 디스크립터와 관련된 프로세스에서 fstat()를 사용할 수있는 경우 이름을 사용할 수 있으면 stat()를 사용할 수 있습니다. – Kalanidhi

+0

작업 프로세스에 따라 사용할 수 있습니다. 예를 들어 fstat()를 사용하는 파일 설명자를 사용하여 파일을 열었습니다. 그러나 파일이 열리지 않으면 stat()를 사용할 수 있습니다. – Kalanidhi

답변

12

마찬가지로, stat()은 파일 이름에서 작동하고 fstat()은 파일 설명자에서 작동합니다.

왜 두 가지 기능이 있습니까?

하나의 요소가 편리 할 수 ​​있습니다. fstat()이 코드의 다른 부분에서 얻은 파일 설명자를 파일 이름을 전달하지 않고도 얻을 수 있다는 것이 좋습니다.

중요한 이유는 보안입니다. 처음에 stat() 파일을 누른 다음 open() 파일을 수정하면 파일이 수정되거나 (예 : 사용 권한이 변경된 경우 등) 또는 심볼릭 링크로 바꿀 수있는 작은 시간 창이 생깁니다.

fstat()은 이러한 문제를 방지합니다. 먼저 open() 파일을 선택하면 파일을 더 이상 발 아래로 스왑 할 수 없습니다. 그렇다면 fstat() 당신은 당신이 올바른 파일을 가지고 있는지 확인할 수 있습니다.

0

당신이 man fstat 보면, 다음과 같은 표시됩니다

함수 fstat()는 파일이 STAT-에드하는 것을 제외) (통계 분석과 동일한 파일에 의해 지정된 입니다 기술자 fd.

약간 확장하려면 파일 경로 대신 파일 설명자가있는 경우 fstat을 사용합니다.

위의 인용문에서 볼 수 있듯이 함수에서 제공하는 정보는 문자 그대로 동일합니다.

+0

그래서 경로를 알고 있지만 파일 설명자를 알고 있는데 어떤 파일을 선택해야합니까? – Rasteril

+0

원하는대로 선택하십시오. 퍼포먼스에 대해 걱정이된다면, 둘 다 벤치마킹을하고 어떤 것이 더 빨리 실행되는지보십시오. :) – merlin2011

0

파일에 대한 파일 설명자 만 있지만 경로를 알 수없는 경우 fstat()을 사용할 수 있습니다. 파일 경로 만있는 경우 stat()을 직접 사용할 수 있으므로 먼저 열 필요가 없습니다.

1

파일 설명자가있는 경우 경로를 알 필요가 없습니다 (예 : 파일이 애플리케이션의 다른 부분에서 열렸을 때).

경로를 알고있는 경우 을 호출하여 fstat을 호출하기 위해 파일 설명자를 가져올 필요가 없습니다.

3

fstatopen 호출을 통해 얻은 파일 설명자와 함께 사용됩니다. fstat(fileno(fp), &st);하십시오 FILE *fpfopenstruct stat st 연 주어 말했다

,이 같은 fstat을 사용할 수 있습니다.