Yani bir işlev zaten açılmış DOSYA işaretçi geçirilir ki:
//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;
}
ben açılmıştı DOSYA işaretçisi kontrol etmek eğer açıklamada kullanmak hangi salt okunur (ya da değil, duruma göre olabilir), dosyaya yazmadan ve kullanıcı (muhtemelen çelişkili) argümanlara güvenmeden mi?
Sistem pencereler, kod :: derleyicileri engeller, ancak kod taşınabilirliği ilgi alanları için çapraz uyumluluk tercih edilir.
Not, bu dosya hakları hakkında bilgi istemez, ancak FILE işaretçisi tarafından hangi erişim modu kullanılmıştır.
KENDİNİ CEVAP [dolayı kullanıcı hakları sınırlamalara ayrı cevap eklenemez]:
o önceki gibi
önerilen uygun #DEFINEs içerir altında başka bir afiş daha iyi bir yanıt var , DOSYA işaretçisinin _flag (_iobuf altında tanımlandığı gibi), bir dosyanın salt okunur olup olmadığını bilmenin anahtarıdır. İşletme mil da değişebilir, ancak, aynı temel kavramı kolayca adapte olmalıdır, örneğin, kod:
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
: tüm farklı erişim modu birlesimlerini fonksiyonu ile kullanıldığında, bir çıktı ürettiği ortaya
#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;
}
Çapraz-uyumlu bir ön uç işlevi (platformla ilgili bildirimlerle aynı adı taşıyan bir işlev) elde edilen bir const int geçiren bir çapraz-uyumlu ön uç işlevi göz önüne alındığında, bunun neden (ya da hiçbir zaman kullanılmadığı) önerilmediğini merak ediyorum. DOSYA işaretçisi _flag verilen sorun için oldukça basit ve kolay bir çözüm olurdu.
Programınızda bilinen bir şeyi keşfetmek için bir Oracle kullanmaktan kaçının. Bazı kodlar DOSYAYI oluşturdu, bu kod da * nasıl * yaratıldığını bilir. İşlevinize bir argüman ekleyin. –
Aslında, kullanıcının bir dosyada hangi erişim haklarına sahip olduğunu bize bildirmek için güvenerek (belirtildiği gibi) bu bir güvenlik açığıdır. Ve bu, tahminler değil, programlamadır - kodun bir kısmı, putc ve benzer komutları kullanırken hata yapabilmek için erişim haklarının ne olduğunu zaten biliyor. – SSight3
Kullanıcıların neden bununla bir ilgisi olduğunu düşündüğünüz hakkında bir fikriniz yok. Argümanları bir işleve iletmek için bir C programcısı gerektirir. Programcıya güvenmiyorsanız, tüm bahisler kapalıdır. –