Une question simple:
Comment vérifier le mode d'accès d'un pointeur de fichier déjà ouvert? p>
DONNE Une fonction est transmise un pointeur de fichier déjà ouvert: P>
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
3 Réponses :
Il n'y a pas de moyen standard d'atteindre cela. P>
Qu'en est-il d'accéder à _flag sous le pointeur de fichier? Ceci contient sûrement les attributs de lecture / écriture tels que des drapeaux d'INT et une seule doit se comparer à tous les numéros prédéfinis à découvrir? Bien que je sois sûr que cela pourrait être fronçonné, je ne vois pas pourquoi pas si longtemps que _Flag est traité comme un const et traité sous les couvertures (et certainement mieux que peut-être des contextes difficiles?). Il semble étrange que le programme puisse connaître un pointeur de fichier est en lecture seule (et refusera ainsi d'écrire) mais je le cas que le programmeur ne peut pas.
Le fichier est opaque, vous ne savez pas quels membres il a.
Simplement écrire un fichier de classe {}; et obliger le compilateur à se plaindre d'une instance de fichier déclarée précédemment révèle ce que les membres ont des membres. Étant une classe bien définie _IOBUF, on peut toujours le regarder en ligne si nécessaire.
Vous demandez un code portable, je vous informe qu'il n'ya aucun moyen de y parvenir tout en restant conformes à ISO 9899. Vous pouvez examiner différentes normes de portée (comme Posix comme Kenny l'a fait, mais je ne donnerais pas de réponse à quelqu'un Quelle cible principale est Windows si je ne sais pas à l'avance que Windows le supporte) et à l'informel (mais je ne connais aucun pour cela pour cela). L'interface documentée pour votre plate-forme échoue à moins de "portable" pour moi, sans parler de non documenté.
Si vous vous référez au code :: Blocks, il fonctionne également sur Linux. L'utilisation de #defines et de détection de la plate-forme, on pourrait créer une fonction d'assistance frontale (qui est mise en œuvre pour accéder à l'égal à _flag sur les différents systèmes). Cependant, de préférence portable sont notés (ce n'est pas une exigence pivotante) - il s'agit de minimiser les modifications apportées au code si elles sont portées.
Notez que la valeur renvoyée est un entier comme combinaison de drapeaux comme Je ne sais pas sur Windows, voir sur Windows / Mingw, quel est l'équivalent de` fcntl (fd, f_getfl) | O_accmode`? . P> p> fcntl code> pour obtenir le mode d'accès du fichier: o_rdonly code> ou O_RDWR code>, pas le "r" code> ou "w +" code> cordes. Voir http://pubs.opengroup.org/onlinepubs/007908799/xsh/open. HTML pour certains de ces drapeaux. P>
La question que vous avez liée à Windows, semble avoir 7 mois et n'a aucune réponse.
Le fichier STDIO.H fourni avec Visual Studio 2010 définit le type de fichier comme ceci: p> < Pré> xxx pré> Lors de la fusion d'un fichier avec le mode "RB", il obtient la valeur de 0x00000001. p> dans la fonction fopen, certains des drapeaux que vous avez interestés dans la boîte être mappé comme suit: p> Ces constantes sont définies dans stdio.h: p> Le descripteur de fichier sous-jacent contient plus info, je n'ai pas encore creusé. P> p>
Comme votre réponse contient plus d'informations que ma réponse (je n'ai pas pu trouver les #defines dans le code :: Blocks [Works pour le code :: Blocs aussi], mais un contexte similaire), je choisirai le vôtre. J'ajouterais seulement la suggestion d'une fonction frontale qui accède à _file est utilisée dans différents systèmes d'exploitation que la fonction peut être ré-définie à la conception. Merci!
Évitez d'utiliser un oracle pour découvrir quelque chose qui est facilement connu dans votre programme. Certains codes ont créé le fichier, ce code sait également comment i> a été créé. Ajoutez une dispute à votre fonction.
En réalité, en s'appuyant sur l'utilisateur pour nous dire quels droits d'accès un fichier est un formulaire de mauvaise forme (comme indiqué), ceci est une vulnérabilité de sécurité. Et ceci est la programmation et non des prédictions - une partie du code sait déjà quels sont les droits d'accès afin de pouvoir faire une erreur lors de l'utilisation de commandes PutC et similaires.
Aucune idée de la raison pour laquelle vous pensez que l'utilisateur a quelque chose à voir avec cela. Il nécessite un programmeur C de passer des arguments sur une fonction. Si vous ne faites pas confiance au programmeur, tous les paris sont éteints.
Bien que ce soit C, dans la langue expansée de C ++, privé et protégé est utilisé par des classes pour protéger les variables, qui à nouveau, seuls les programmeurs peuvent accéder et non aux utilisateurs - donc évidemment que la pratique est parfaitement valide (surtout si vous voulez une ligne droite. -fort front-end, vous pouvez simplement utiliser et ne pas avoir à "apprendre"). C'est généralement une bonne pratique de ne pas supposer rien i> (parce que les hypothèses mènent assez souvent aux insectes) ... [suite]
... et il y a facilement la possibilité d'un programmeur qui passe un pointeur de fichier en lecture seule, mais en passant l'argument contradictoire, il est écritable, ce qui est une faille de sécurité et évidemment un bug. Le meilleur moyen d'éviter les insectes n'est pas de les laisser atteindre en premier lieu. En outre, tout le point de la fonction ci-dessus consiste à détecter le mode d'accès d'un pointeur de fichier (qui était déjà connu de défaite le point) afin d'éviter les insectes. La prévention est meilleure que la remède.