2016-06-08 1 views
0

juste en essayant d'ouvrir un fichier. Je l'ai fait pour 100 fois, puis j'ai envoyé le signal SIGCHLD à d'autres processus et je pense que je ne pouvais plus ouvrir ce fichier.ouvrir le fichier linux eclipse c erreur après getchld

#include <signal.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 

#define FLAGS IPC_CREAT | 0644 
int main() { 
int res =open("results.txt",FLAGS); 
if(res== -1) { printf("error!!")} //prints it every time 
return 0;} 

..il est soudainement arrivé ... aide ???

+1

La première chose à faire serait de trouver la cause spécifique de l'erreur, en utilisant errno et/ou strerror(). [Cette page] (http://beej.us/guide/bgnet/output/html/multipage/perrorman.html) devrait être utile. – nephtes

+1

Au meilleur de ma connaissance, 'IPC_CREAT' n'est pas un mode valide de' open'. Vouliez-vous utiliser 'shmget'? – user590028

+0

lors de l'impression d'une erreur, sortie vers 'stderr', pas' stdout'. et sortir le message que le système d'exploitation pense est le problème. C'EST À DIRE. utiliser: 'perror()', pas 'printf()' – user3629249

Répondre

1

Vous faites quelque chose d'étrange avec les drapeaux. Je pense que votre intention est comme ci-dessous le code:

#define FLAGS O_CREAT 
#define MODE 0644 
int main() 
{ 
    int res =open("results.txt",FLAGS,MODE); 
    if(res== -1) { printf("error!!");} //prints it every time 
    return 0; 
} 
+0

cette réponse ne compile pas en raison du point-virgule de fin manquant sur l'appel de l'instruction 'printf()' – user3629249

+0

Ceci a été copié à partir de OP. Quoi qu'il en soit, maintenant, merci – Smeeheey

0

le code suivant:

  1. compile proprement
  2. appelle correctement la fonction open()
  3. affiche correctement le message d'erreur
  4. ne le fait pas #include fichiers d'en-tête qui ne sont pas utilisés
  5. indente systématiquement la code
  6. suit l'axiome: `une seule déclaration par ligne et (au plus) une déclaration de variable par déclaration.
  7. Séparation entre deux blocs de code (pour, si, d'autre, alors que, do ... while, switch, cas, par défaut) par l'intermédiaire d'une ligne vide
  8. utilise une signature appropriée pour la fonction main() (les parens vides dans le code affiché signifie que tout nombre de paramètres, y compris 0 paramètres, sont autorisés
  9. Code
  10. ne doit pas retourner 0 succès lorsqu'une erreur se produit si l'aide exit(EXIT_FAILURE)

Et maintenant le code:

#include <stdio.h> // perror() 
#include <stdlib.h> // exit(), EXIT_FAILURE 
#include <unistd.h> // open() 
#include <fcntl.h> // O_CREAT 

#define FLAGS O_CREAT 
#define MODE 0644 

int main(void) 
{ 
    int res =open("results.txt", FLAGS, MODE); 
    if(res== -1) 
    { 
     perror("open for results.txt failed"); 
     exit(EXIT_FAILURE); 
    } 

    return 0; 
}