簡単な質問: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 [によるユーザー権利の制限のために、別の答えを追加することはできません]:
先に示唆したように、その下に別のポスターによるより良い答えが正しいの#define
を含んであります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;
}
なぜ互換性のないフロントエンド関数(同じ名前の関数であり、プラットフォームによっては宣言がある)が与えられたconst intを渡すと、これは決して提案されなかった与えられたFILEポインタ_flagは、問題に対する非常に簡単で簡単な解決策になります。
オラクルを使用して、プログラム内で容易に知ることができないようにします。いくつかのコードはFILEを作成し、そのコードはどのように作成されたかを知っています。関数に引数を追加します。 –
実際には、ユーザーがファイルにどのようなアクセス権があるかを伝えることは、セキュリティ上の脆弱性があることを前提とした悪質な形式です。これはプログラミングであり、予測ではありません。コードの一部は、putcや同様のコマンドを使用しているときにエラーになるためのアクセス権が何であるかをすでに知っています。 – SSight3
なぜあなたはユーザーがこれと何か関係があると思いますか?関数に引数を渡すには、Cプログラマが必要です。プログラマーを信頼しないと、すべての賭けはオフになります。 –