stdio FILE *
포인터가 있으면 열린 파일의 이름을 찾을 수있는 방법이 있습니까?파일에서 (열린) 파일 이름 확인 *
답변
POSIX 시스템에서 fileno()를 사용하여 FILE *에서 파일 디스크립터를 가져올 수 있다고 생각한 다음 fstat를 사용하여 파일 디스크립터에서 통계 정보를 가져올 수 있습니다 (here). stat 구조는 장치 번호와 inode 번호를 포함합니다. 아이 노드와 일치하는 파일을 파일 시스템에서 확인할 수 있습니다. 이것은 분명히 물건으로 가득 찬 파일 시스템을위한 시간이 좀 걸릴 것입니다.
stdin 또는 stdout과 같은 스트림이거나 삭제 된 열린 파일 인 경우 스트림에 파일 이름이 없을 수 있다는 점이 실제로 가능하지 않습니다 (링크 된 기사에서 설명). 하드 링크 때문에 여러 개의 이름을 가질 수 있습니다.
링크 된 기사는이 문제의 불용성을 간략하게 설명하는 this comp.lang.c FAQ을 언급합니다.
편집 : 수정 해 주셔서 감사합니다.
"당신은 할 수 없습니다"라는 대답에 감사드립니다. – Jamie
fstat()는 파일 설명자가 열려있는 파일을 설명하는 데 사용됩니다. fileno()를 사용하여 파일 포인터에서 파일 설명자를 가져옵니다. 아이 노드가 발견되지 않았거나 하드 링크의 수에 따라 파일에 가능한 여러 이름이있을 수 있습니다. –
아니요, 없습니다. 그 외에도 FILE *은 명명 된 파일을 참조하지 않을 수 있습니다. 응용 프로그램에이 기능이 필요한 경우 열기 FILE *에서 열기 위해 사용한 파일 이름으로 맵 을 유지해야합니다.
표준 정의 된 휴대용 솔루션이 없습니다. 그러나 OS 제공 API 세트를 살펴볼 수 있습니다. POSIX 시스템에는 설명자 (FILE *
아님)를 사용하고 정보를 반환하는 fstat
함수가 있습니다.
- 1. 파일에서 파일 이름 찾기 (디렉토리에서)
- 2. swf 파일에서 사용하는 클릭 태그 이름 확인
- 3. 체크인시 TFS 파일 이름 확인
- 4. O_WRONLY로 열린 파일에서 읽기
- 5. Java로 열린 포트 확인
- 6. 실행 파일에서 변수 확인
- 7. 열린 파일의 사용자 이름 얻기
- 8. Windows에서 열린 파일 덮어 쓰기
- 9. 파일 설명자 및 열린 파일
- 10. 자바에서 열린 임시 파일
- 11. Blackberry 열린 파일
- 12. 열린 선반 파일
- 13. SQLite3 열린 파일 문제
- 14. 열린 파일 읽기 전용
- 15. 열린 파일 목록에 나열
- 16. VI 편집기에서 열린 파일에서 지정된 단어 검색
- 17. 열린 파일에서 뭔가를 삭제하는 기본적인 방법이 있습니다
- 18. 클래스 이름 확인
- 19. UDF의 지연된 이름 확인
- 20. 사용자 이름 확인 RegEx는
- 21. xml 노드 이름 확인
- 22. Windows 네트워킹 이름 확인
- 23. 동적 이름 확인
- 24. 자동 - 사용자 이름 확인
- 25. 도메인 이름 확인
- 26. Bonjour에서 느린 이름 확인
- 27. 확인 사용자 이름 가용성
- 28. 리디렉션에서 도메인 이름 확인
- 29. 템플릿의 이름 확인
- 30. C/C++에서 열린 포트 확인
파일 설명자는 FILE *과 다른 정수입니다. 나는 당신이 FILE *의 관점에서 대답을 원한다고 가정하고 있지만, 당신은 당신의 제목을 편집하고 싶을지도 모른다. – mkb