Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lecture fragmentee de binaires

29 réponses
Avatar
NaeiKinDus
Bonjour tout le monde !

Je planche actuellement sur un serveur web, et je dois "fragmenter"
l'envoi de mes donnees pour ne pas bloquer X clients lorsqu'un
telecharger un fichier... Disons en blocs de 5Ko. Neanmois, je n'y
arrive absolument pas, ma lecture plante avec un tellg qui renvoit -1
comme taille, et une concat qui foire, donc :(

Code:

ifstream fileStream;
unsigned int size;
char tmp[4096;]

fileStream.open(file.c_str(), ios_base::in | ios_base::binary); //file
est un string recuperee dans un autre endroit du code
cerr << "opened ? " << fileStream.is_open() << endl; // affiche 1
cerr << "good ? " << fileStream.good() << endl; // affiche 1
request.append("\r\nContent-Length: ");
fileStream.seekg(0, ios_base::end);
size = fileStream.tellg();
oss << size;
request.append(oss.str());
request += "\r\n";
request.append("Accept-Ranges: bytes\r\n");
request.append("Connection: keep-alive\r\n\r\n"); // Separation du
header et du body par une paire de "\r\n"
if (*idx > 0){ //*idx est un pointeur sur un int qui permet de
reprendre la lecture la ou on l'avait laissee...
cerr << "clearing request\n";
request.clear(); // si on passe ici, on a pas besoin de header (en
theorie)
fileStream.seekg(*idx);
}
else
fileStream.seekg(0, ios_base::beg);
long pos = (long)fileStream.tellg() - *idx; // Je souhaitais pouvoir
me placer dans mon tmp pour mettre le '\0', mais tellg me renvoit
toujours -1 :(
cerr << "opened ? " << fileStream.is_open() << endl; // renvoi 1
cerr << "good ? " << fileStream.good() << endl; // renvoi 1
fileStream.read(tmp, 4095); // char tmp[4096]... 1 octet pour mettre
le '\0' (habitude unix... bonne ou pas ?)
cerr << "tellg: " << (long)fileStream.tellg() << endl; // renvoi -1
cerr << "idx: " << *idx << endl; // renvoi 0
cerr << "pos: " << pos << endl; // renvoi -1
//tmp[pos] = '\0'; // donc logiquement ca pete ici
*idx = (long)fileStream.tellg(); // je garde en memoire la valeur de
lecture pour reprendre plus tard
if (*idx == size){ // si le fichier est complet, on met idx a -1 pour
que la fonction appellante close la socket.
cerr << "Reseting *idx to -1";
*idx = -1;
request.append(tmp);
request += "\r\n";
}
else
request.append(tmp);



Merci a tous :)

9 réponses

1 2 3
Avatar
Sylvain
James Kanze wrote on 03/04/2007 10:30:

mais je vois « (VS.80) » ou « (VS.71) » dans l'URL. Qui est
autrement illisible, ce qui est normal, parce que normalement,
une personne n'a pas à régarder l'URL -- c'est pour la machine.


hmmm, pour le gogo victime à répétition de phishing, d'accord.
un développeur a le droit de savoir lire un URL.

C'est nettement plus facile à naviguer que les pages de man sous
Unix, mais c'est loin d'être parfait non plus.


<hc & hs>
de man, je ne connais que "Entrée" et "Q", je le trouve donc en effet
moins facile d'emploi; n'existe-t-il pas des browser pleine page pour
pages man ?
</hc & hs>

Sylvain.

Avatar
James Kanze
On Apr 3, 12:04 pm, Sylvain wrote:
James Kanze wrote on 03/04/2007 10:30:

<hc & hs>
de man, je ne connais que "Entrée" et "Q",


Qui ne sont pas de man:-).

man, en fait, c'est plus un wrapper qu'une application en soit.
Quand tu fais « man xxx », il cherche un fichier du nom
« xxx.* », selon certaines règles, l'envoie à travers les
formatteurs (nroff et companie), et en affiche le résultat à
travers « more ». Les commandes que tu connais sont ceux de
« more », tout bêtement.

En fait, « more » n'est qu'un défaut, qu'on peut changer au
moyen de la variable d'environement PAGER. Moi, j'ai défini
PAGERt (qui ne fait que copier tout bêtement), j'ai
positionné des ressources pour que xterm retienne quelque
centaines de milliers de lignes, et j'utilise le scrollbar pour
me positionner où je veux.

Mais évidemment, il reste le problème de base : il faut
connaître le nom de la commande ou de la fonction pour y accéder
à la page de man. On est quand même en 2007 ; je m'attendrais à
une fonction de recherche un peu plus puissante. Et du fait
qu'il affiche dans un xterm, il n'y a pas de graphismes, etc. Je
ne dis pas que c'est toujours utile, mais parfois, un bon image
en dit long.

je le trouve donc en effet
moins facile d'emploi; n'existe-t-il pas des browser pleine page pour
pages man ?


Je crois qu'il y a des plugin et pour emacs et pour vim pour le
faire ; comme j'ai dit, j'affiche la pleine page directement
dans mon xterm. Et il y a « less » aussi : une variante de
more qui permet aussi d'aller en arrière (mais sans le
scrollbar, etc.) Mais même alors, pas de liens hypertexte, et il
faut bien connaître une commande pour commencer.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
fabien.chene
"James Kanze" writes:

[...]
je le trouve donc en effet
moins facile d'emploi; n'existe-t-il pas des browser pleine page pour
pages man ?


Je crois qu'il y a des plugin et pour emacs et pour vim pour le
faire


Pour emacs, il y a M-x man, qui ouvre la page de man entièrement dans
un tampon. De là, on peut profiter des commandes habituelles, plus les
liens entre les pages de man.


--
Fab


Avatar
Sylvain
Fabien Chêne wrote on 05/04/2007 20:42:
"James Kanze" writes:

[...]
je le trouve donc en effet
moins facile d'emploi; n'existe-t-il pas des browser pleine page pour
pages man ?
Je crois qu'il y a des plugin et pour emacs et pour vim pour le

faire


Pour emacs, il y a M-x man, qui ouvre la page de man entièrement dans
un tampon. De là, on peut profiter des commandes habituelles, plus les
liens entre les pages de man.


merci pour ces points - je n'avais pas réalisé que la sortie de man
était pipé sur un more (pourtant presque évident) et je ne savais pas
que ce pipe était configurable - si je trouve 3 mn 12 je me coderais un
more-like avec PgDn / PgUp (j'utilise en fait "putty.exe" sous wintel
comme terminal mais il doit -j'espère- correctement gérer les I/O avec
l'appli. linux distante).

Sylvain.



Avatar
fabien.chene
Sylvain writes:

pour clore ce HC, où définir "PAGER" ? le shell est apparemment un
bash' et aucun paginateur n'est défini (laissant la main à more)


Avec le shell bash, c'est dans le fichier ~/.bashrc :
export PAGER=less

--
Fab

Avatar
Michel Decima
Sylvain wrote:
Fabien Chêne wrote on 05/04/2007 20:42:
"James Kanze" writes:

[...]
je le trouve donc en effet
moins facile d'emploi; n'existe-t-il pas des browser pleine page pour
pages man ?
Je crois qu'il y a des plugin et pour emacs et pour vim pour le

faire


Pour emacs, il y a M-x man, qui ouvre la page de man entièrement dans
un tampon. De là, on peut profiter des commandes habituelles, plus les
liens entre les pages de man.


merci pour ces points - je n'avais pas réalisé que la sortie de man
était pipé sur un more (pourtant presque évident) et je ne savais pas
que ce pipe était configurable - si je trouve 3 mn 12 je me coderais un
more-like avec PgDn / PgUp (j'utilise en fait "putty.exe" sous wintel
comme terminal mais il doit -j'espère- correctement gérer les I/O avec
l'appli. linux distante).


Si c'est un linux, tu dois avoir dessus la commande less, qui gere
PgDn/PgUp, la recherche avec /, et surement plein d'autre choses.
Ca pourrait te faire gagner 3 minutes ;)




Avatar
Sylvain
Michel Decima wrote on 05/04/2007 23:44:

Si c'est un linux, tu dois avoir dessus la commande less, qui gere
PgDn/PgUp, la recherche avec /, et surement plein d'autre choses.
Ca pourrait te faire gagner 3 minutes ;)


indeed !! which less => /usr/bin/less, merci pour les 3 mn gagnés ;)

pour clore ce HC, où définir "PAGER" ? le shell est apparemment un
'bash' et aucun paginateur n'est défini (laissant la main à more) -- un
"LESSOPEN" est défini selon "|/usr/bin/lesspipe.sh %s", je ne sais pas
si ce /less/ là a un rapport avec le premier...

Sylvain.

Avatar
Michel Decima
Michel Decima wrote on 05/04/2007 23:44:

Si c'est un linux, tu dois avoir dessus la commande less, qui gere
PgDn/PgUp, la recherche avec /, et surement plein d'autre choses.
Ca pourrait te faire gagner 3 minutes ;)


indeed !! which less => /usr/bin/less, merci pour les 3 mn gagnés ;)


De rien. Et comme on dit, "less is more" ...


Avatar
Sylvain
Fabien Chêne wrote on 05/04/2007 23:36:
Sylvain writes:

pour clore ce HC, où définir "PAGER" ? le shell est apparemment un
bash' et aucun paginateur n'est défini (laissant la main à more)


Avec le shell bash, c'est dans le fichier ~/.bashrc :
export PAGER=less


formidable !!!
merci Fabien, James, Michel (par ordre alpha. pas necc. d'apparition).

Sylvain.


1 2 3