Recuperer le command name a partir du PID [C-UNIX] - C++ - Programmation
Marsh Posté le 23-11-2002 à 20:38:03
bon j crois que c pas possible l autre solution est de mettre un pause qui attend un signal et de mettre un timer sur ce pause.
ya une fonction qui est setitimer je pense que ca va m aider
Marsh Posté le 23-11-2002 à 21:14:29
Gugus2000 a écrit a écrit : bon j crois que c pas possible l autre solution est de mettre un pause qui attend un signal et de mettre un timer sur ce pause. ya une fonction qui est setitimer je pense que ca va m aider |
je vois po le rapport avec ton ta question initiale?
d'ailleurs tu as besoin du nom du programme pour faire quoi?
Marsh Posté le 23-11-2002 à 21:51:07
j ai codé un serveur et un client
je lance le serveur il me dit son PID
le client je le lance de cette facon :
./client [PID DU SERVEUR] "ma phrase"
je voudrais faire en sorte que si on se trompe sur le PID que le client retourne un message d erreur
le mien attend une reponse duserveur qu il n aura jamais si le PID est faux
Marsh Posté le 23-11-2002 à 21:56:14
ebn vu que tu travailles sur le meme PC, pourquoi ne pas utilisé un fichier pour echanger ces informations? le serveur y ecrit ou il est et d'autres infos, et les clients analyse ce fichier: ca me aprait le plus simple
parce que donner un pid...
ou alors mets un timeout ou definit un petit protocole server/client: le server doit repondre au client pour lui confirmer sa conexxion (d'ou ton idée du signal)
Marsh Posté le 23-11-2002 à 22:31:32
sur solaris il y a une commande pwdx qui prends en paramètre un pid. Elle retourne le path de lancement du prog.
Mais rien de POSIX n'existe je pense.
Marsh Posté le 24-11-2002 à 12:29:09
Taz@PPC a écrit a écrit : ebn vu que tu travailles sur le meme PC, pourquoi ne pas utilisé un fichier pour echanger ces informations? le serveur y ecrit ou il est et d'autres infos, et les clients analyse ce fichier: ca me aprait le plus simple parce que donner un pid... ou alors mets un timeout ou definit un petit protocole server/client: le server doit repondre au client pour lui confirmer sa conexxion (d'ou ton idée du signal) |
comme c trop pas con ta premiere id
Marsh Posté le 24-11-2002 à 16:48:27
le problème d'associer un PID au nom du programme est pas tres utile car si un programme est lancé plusieur sfois (plusieurs processus), on si retrouve plus.
faut donc se fier qu'au PID
tiens moi au courant de quelle solution tu adoptes
Marsh Posté le 24-11-2002 à 20:45:41
j ai pas encore gerer ca mais ton idee ma permis de gerer plusieurs client
lorsque je lance un client je lock un fichier je balance mais infos au serveur et je quitte
si un autre client est lancé pendant que l autre envois des infos et bien il tourne en boucle jusk a ce qu il puisse a son tour locker le fichier.
Ca marche en tous cas
Marsh Posté le 24-11-2002 à 20:56:35
on nous demande :
- gestion des erreurs de transmission et reemission
moi quand mon client envois un char mon serveur lui repond j ai recu qqch tu peux continuer a m envoyer ton signal.
est ce consideré comme une gestion d erreurs de transmission et reemission ? je pense pas
je comprend pas trop comment faire ca
j vais ptet expliquer le sujet ca aidera pour comprendre ca :
un serveur et un client ds deux term different
le serveur s execute et affiche son pid
on lance le client de la maniere suivante :
client [PID DU SERVEUR] "une chaine str"
La communication entre le client et le serveur doit se faire uniquement par signaux (perso j utilise SIGUSR1 pour le 1 et SIGUSR2 pour le 0).
ma methode :
envoyer le PID du client au serveur
transformer ma chaine en un code binaire
envoyer un bit et attendre un signal du serveur pour qu il me dise j ai bien recu ton bit
renvoyer un autre bit etc ...
Quand il a 8bits afficher le char
une fois que la chaine est fini mon client envois un \n
voila
Marsh Posté le 24-11-2002 à 20:59:43
pas de pipe? putain c'est vraiment pour faire chier
perso j utilise SIGUSR1 pour le 1 et SIGUSR2 pour le 0
tu peux passer ta chaine à la moulinette d'un cheksum et l'envoyer egalement afin de vérifier l'autenticité des données recues
Marsh Posté le 24-11-2002 à 21:01:56
Pour avoir le nom d'un process tu peux toujours aller lire les fichiers sous /proc.
Marsh Posté le 24-11-2002 à 21:03:14
Taz@PPC a écrit a écrit : pas de pipe? putain c'est vraiment pour faire chier perso j utilise SIGUSR1 pour le 1 et SIGUSR2 pour le 0 tu peux passer ta chaine à la moulinette d'un cheksum et l'envoyer egalement afin de vérifier l'autenticité des données recues |
ca va rallonger le tps d execution
la je suis a 1.69s pour 1024chars et faut pas depasser 2s
Marsh Posté le 24-11-2002 à 21:03:55
Matafan a écrit a écrit : Pour avoir le nom d'un process tu peux toujours aller lire les fichiers sous /proc. |
oué mais ca c en shell moi je cherchais en C-UNIX et puis il fo etre root pour aller la dedant je le suis pas sur la machine
Marsh Posté le 24-11-2002 à 21:08:16
Sous Linux, tu peux aller voir dans /proc/<pid>/cmdline il me semble. Mais je n'ai aucune idée de ce qu'il faut pour avoir ça ou même si c'est standard
Marsh Posté le 24-11-2002 à 21:10:04
Gugus2000 a écrit a écrit : ca va rallonger le tps d execution la je suis a 1.69s pour 1024chars et faut pas depasser 2s |
3 fois rien, c'est moins couteux que de confirmer apres chaque bit. jete quand meme un cout d'oeil a crypt.
sinon tu peux implémener toi meme un petit controle de parité ou Hamming pour chaque packet de bit émis
Marsh Posté le 24-11-2002 à 21:11:45
Taz@PPC a écrit a écrit : 3 fois rien, c'est moins couteux que de confirmer apres chaque bit. jete quand meme un cout d'oeil a crypt. sinon tu peux implémener toi meme un petit controle de parité ou Hamming pour chaque packet de bit émis |
je suis obligé de recoder le machin
mais bon je vaus le faire a l arrache clairement
Marsh Posté le 24-11-2002 à 21:18:47
Taz@PPC a écrit a écrit : recoder quoi? ton programme? ca va surtout consister a virer les lignes |
bah si je vire la reponse du serveur les signaux vont arriver trop vite ca va toujours etre erronnes.
si je met un usleep(0) bah beaucoup beaucoup trop lent du genre 60s pour 1024 chars
du coup je suis obligé de foutre une boucle ds mon programme pour que tous les 8 bits j aille ds une autre fonction qui va recevoir le checksum et le comparer au sien et non pas l afficher
Marsh Posté le 24-11-2002 à 21:21:07
Gugus2000 a écrit a écrit : bah si je vire la reponse du serveur les signaux vont arriver trop vite ca va toujours etre erronnes. si je met un usleep(0) bah beaucoup beaucoup trop lent du genre 60s pour 1024 chars du coup je suis obligé de foutre une boucle ds mon programme pour que tous les 8 bits j aille ds une autre fonction qui va recevoir le checksum et le comparer au sien et non pas l afficher |
regarde tu coté des signaux temps réel et de sigqueue
Marsh Posté le 23-11-2002 à 20:08:46
Y a t il une fonction qui permettrait de recuperer le nom du programme a partir du PID de celui ci du genre :
voila sinon si ca existe po j ai penser a executer la commande ps
la parser jusk a trouver le PID et ensuite enregistrer le nom du programme dans un char *
mais bon c un peut gorrer ya plus simple chuis sur
---------------
Je décline toute responsabilité potentielle pour le contenu de mes propos et contenu multimedia (images, videos et sons) + miroir magic.