Problème avec la fonction setrlimit

Problème avec la fonction setrlimit - C - Programmation

Marsh Posté le 20-03-2011 à 18:08:01    

Bonjour,
Voici mon code :
 
 
int main()
{
while (1) {
  struct rlimit limit;
 
  int temps_ulimit = 0;  
  limit.rlim_cur = 0;
  limit.rlim_max = 0;
   if (setrlimit(RLIMIT_CPU, &limit) != 0) {
    printf("wesh fou" );
    exit(1);
  }else {printf("ca marche" ); }
   
  }
}
 
Comment ca se fait que la boucle tourne à l'infini? J'ai pourtant mis 0 comme délai souple et dur!
Meme quand je mets une/5/10 seconde, ca ne marche pas...

Message cité 1 fois
Message édité par ikseg le 20-03-2011 à 18:24:05
Reply

Marsh Posté le 20-03-2011 à 18:08:01   

Reply

Marsh Posté le 20-03-2011 à 18:24:52    

C'est  un appel a setrlimit que tu voulais faire? parce que la c'est pas le cas:
Tu demandes la limite avec getrlimit, ca marche, la valeur de retour est 0,  
comme 0 != 0 est faux, on sort pas, mais on boucle a l'infini avec printf("ca marche" );
La boucle infinie est donc logique il me semble.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-03-2011 à 18:40:24    

Excuse moi. Avec le setrlimit ça marche en effet.
 
En fait j'ajoute des précisions à mon problème :
 
 
Ce code s'arrête bien directement :
int main()
{
struct rlimit limit;
 
  int temps_ulimit = 0;  
  limit.rlim_cur = temps_ulimit;
  limit.rlim_max = temps_ulimit;
   if (setrlimit(RLIMIT_CPU, &limit) != 0) {
    printf("wesh fou" );
    exit(1);
 }
while (1) {
  /*pid_t pid_fils;
 
  switch ( pid_fils = fork() ) {
   case 0:
    printf("fils" );
   break;
   default:
    waitpid(pid_fils, NULL, 0);
   break;
   
  }*/
  }
   
   
}
 
 
Par contre, si j'enlève les commentaires (avec le fork() et tout), ça boucle à l'infini :
 
int main()
{
struct rlimit limit;
 
  int temps_ulimit = 0;  
  limit.rlim_cur = temps_ulimit;
  limit.rlim_max = temps_ulimit;
   if (setrlimit(RLIMIT_CPU, &limit) != 0) {
    printf("wesh fou" );
    exit(1);
 }
while (1) {
  pid_t pid_fils;
 
  switch ( pid_fils = fork() ) {
   case 0:
    printf("fils" );
   break;
   default:
    waitpid(pid_fils, NULL, 0);
   break;
   
  }
  }
   
   
}
 
Comment ça se fait?

Reply

Marsh Posté le 20-03-2011 à 18:41:09    

ikseg a écrit :

Bonjour,
Comment ca se fait que la boucle tourne à l'infini? J'ai pourtant mis 0 comme délai souple et dur!


 
Je ne sais pas ce que tu veux faire, mais sans appel a setrlimit, tu ne mets aucune limite !
 
getrlimit récupère juste la valeur.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed