간단한 질문 :C 파일 작업 : 열려있는 파일 포인터 액세스 모드 확인
이미 열린 파일 포인터의 액세스 모드는 어떻게 확인합니까?
그래서 함수가 이미 열려있는 파일 포인터 전달되는 말 :
//Pseudo code
bool PseudoFunction(FILE *Ptr)
{
if(... Insert check for read-only access rights)
{
//It's read only access mode
return true;
}
//File pointer is not read-only and thus write operations are permitted
return false;
}
내가으로 열립니다했던 FILE 포인터를 확인하기 위해 if 문에서 사용하는 것이 무엇 읽기 전용 (또는하지 않는 경우와 파일에 쓰지 않고 사용자가 (아마도 모순되는) 인수를 전달하지 않고도 가능합니까?
시스템은 windows, code :: blocks 컴파일러이지만 코드 이식성, 상호 호환성 우선 순위를 위해.
참고로 파일 권한에 대해서는 묻지 않지만 FILE 포인터는 어떤 액세스 모드를 사용했는지 유의하십시오.
SELF-ANSWER [인해 사용자 권한 제한으로 별도의 대답을 추가 할 수 없습니다] :
그 이전으로
제안 적절한 # 정의를 포함 아래에 또 다른 포스터에 의해 더 나은 답이있다 FILE 포인터의 _flag (_iobuf에 정의 된대로)는 파일이 읽기 전용인지 여부를 알 수있는 키입니다. 마일리지 비록 다를 수 있지만, 동일한 기본적인 개념이 쉽게 적응할 수 있어야 예 번호 :
Output:
w: 2
r: 1 File is read only!
a: 2
wb: 2
rb: 1 File is read only!
ab: 2
w+: 128
r+: 128
a+: 128
w+b: 128
r+b: 128
a+b: 128
: 모든 다른 액세스 모드 조합은 상기 기능을 사용하는 경우의 출력을 생산하고
#define READ_ONLY_FLAG 1
bool PrintFlagPtr(const char FileName[], const char AccessMode[])
{
FILE *Ptr = NULL;
Ptr = fopen(FileName,AccessMode);
printf("%s: %d ",AccessMode,Ptr->_flag);
int IsReadOnly = Ptr->_flag;
fclose(Ptr);
Ptr = NULL;
if((IsReadOnly&READ_ONLY_FLAG) == READ_ONLY_FLAG)
{
printf("File is read only!\n");
return true;
}
printf("\n");
return false;
}
궁금한 점은 크로스 - 호환 프론트 - 엔드 함수 (플랫폼에 따라 선언이있는 같은 이름의 함수)가 주어진 이유는 무엇입니까? 주어진 FILE 포인터 _flag는 문제에 대한 아주 간단하고 쉬운 해결책이 될 것입니다.
오라클을 사용하여 프로그램 내에서 쉽게 알려진 것을 발견하지 마십시오. 어떤 코드는 FILE을 만들었고, 그 코드는 어떻게 생성되었는지 * 알고 있습니다. 함수에 인수를 추가하십시오. –
사실, 사용자가 파일에 어떤 액세스 권한이 있는지 알려주는 것은 보안 취약성을 감안할 때 나쁜 형식 (명시된대로)입니다. 그리고 이것은 예측이 아니라 프로그래밍입니다. 코드의 일부는 putc 및 유사한 명령을 사용할 때 오류를 일으킬 수있는 액세스 권한이 무엇인지 이미 알고 있습니다. – SSight3
사용자가 사용자와 관련이 있다고 생각하는 이유를 알 수 없습니다. 함수에 인수를 전달하려면 C 프로그래머가 필요합니다. 프로그래머를 신뢰하지 않으면 모든 배팅이 해제됩니다. –