7
votes

Quand un appel peut-il échouer sur Linux (NULL)

Selon cette documentation http://www.cplusplus.com/reference/clibrary / ctérieur / heure /

Pour le temps (null) "Si la fonction ne pouvait pas récupérer l'heure du calendrier, il renvoie une valeur de -1."

Est-ce quelque chose que je devrais vérifier dans mon code? Sûrement quelque chose doit aller assez tort si le temps (null) ne récupère pas le temps.


1 commentaires

Lorsqu'il y a une panne de courant grave ou lorsque votre ordinateur se bloque ...;) ... vous le mettez dans un blocage enfin?


4 Réponses :


2
votes

Page d'homme Ubuntu dit TIME (2) peut échouer en raison de efault (" t Points en dehors de votre espace d'adresses accessible"). < / p>

osx man's page dit qu'il peut échouer pour les mêmes raisons que GetTimeOdday , qui sont efault et Eperm (pas sûr de savoir comment cela s'applique à temps ).

Par conséquent, il ne peut pas échouer pour l'argument de null , en fonction de la documentation des systèmes susmentionnés.

aussi, POSIX Spécifie du tout des conditions d'erreur pour cela. fonction.


1 commentaires

La question concerne quand t est null.



0
votes

Vous avez quelque chose appelé une horloge système. Si cela est cassé, cela échouera, bien qu'il puisse y avoir de nombreuses autres raisons.


2 commentaires

Comment l'horloge système peut-elle "casser"? Je l'ai vu perdre du temps, gagner du temps et se comporter anormalement. Mais je ne l'ai jamais vu ne pas travailler du tout.


Référence à l'article d'Atomice: Si vous utilisez ceci pour dire --- Le NDS (www.devkitpro.com), alors il peut (Downvoter Expliquez-vous)



17
votes

Vous pouvez exécuter sur un périphérique intégré qui n'a pas d'horloge en temps réel.

Le code source GLIBC prétend que le temps SysCall ne peut pas échouer sur Linux: P>

SYSCALL_DEFINE1(time, time_t __user *, tloc)
{
        time_t i = get_seconds();

        if (tloc) {
                if (put_user(i,tloc))
                        return -EFAULT;
        }
        force_successful_syscall_return();
        return i;
}


0 commentaires

0
votes

Le cas évident serait un système dont l'horloge interne nécessite une initialisation externe (à l'aide d'EG. NTP). Jusqu'à ce que cela soit arrivé, l'horloge interne ne peut pas donner des valeurs relatives à époch, bien qu'elle puisse être utilisée pour mesurer les intervalles. TIME_T est EPOCH-Relatif et donc TIME (NULL) DOIT ÉCHÉNER dans ce cas.


2 commentaires

ne serait-il pas temps (null) juste donner la mauvaise réponse ici? Plutôt que d'échouer et de retourner -1?


Non, pas si c'est correctement mis en œuvre. C'est assez raisonnable. Considérez un système d'exploitation qui implémente un / dev / d / deivce, lequel lorsque la lecture donne l'heure actuelle. Jusqu'à l'initialisation, vous obtiendrez une erreur de lecture sur l'appareil. Une norme C lib serait transmettre à cette défaillance lors de l'appelant heure ()