Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
que fait vraiment la fonction read quand elle attend
Envoyé par: cosmoff

Bonjour,

lorsque l'un des mes processus attend de recevoir un massage via la fonction read que se passe t'il ?

je constate déja que le processus est endormi via la commande ps. Donc la fonction read possede probablement la fonction pause(). j'imagine que le noyau lui emet un signal pour lui dire qu'un nouveau message est arrivé dans la zone mémoire et le processus recupere le message, non ?

est ce que je peux tromper mon processus en lui émettant moi meme le signal qui lui dit vas y recupere les données dans la zone mémoire ? si oui c'est quoi le signal ?

Merci d'avance pour vos réponses

Poste le Thursday 3 January 2019 20:08:50
Répondre     Citer    
Re: que fait vraiment la fonction read quand elle attend
Envoyé par: amelea

Je ne suis pas sur que l'on utilise un signal pour réveiller le process.
Mais il est toujours possible dans un programme en c de récupérer le déclenchement de tout signal.

En c pour faire ce que tu veux on se met en attente en mode non bloquant et on attend sur une event avec un timeout éventuelle.
Il est toujours possible par programme de déclencher cette évent.

Le code suivant se retrouve probablement dans le code de read.

//ouverture en mode non bloquant
dwFlagOuverture = dwFlagOuverture | O_NONBLOCK | O_ASYNC;
m_hHandle = open(un_szNom, dwFlagOuverture);

Puis attente événement:
bool bOk;
struct pollfd PollFd;
bool bFin = false;
PollFd.fd = m_hHandle;

PollFd.events = 0xefb;//POLLIN|POLLERR|POLLHUP;
while (!bFin) {
int iRetour = poll(&PollFd, 1, un_iTimeout);
switch (iRetour) {
case 0: //timout
break;
case -1: //erreur (errno)
break;
default: //Contient le nombre de structure
//ici récupérer les données
}//switch iretour
}

Poste le Saturday 6 July 2019 07:05:49
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
que fait vraiment la fonction read quand elle attend
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons