je suis en train de développer un ptit programme (rudimentaire) de
compression de données. Je l'ai d'abord ecrit sous ouindoz et
aujourd'hui, je l'ai porté sous ... LINUX (ouais, yeepeee !!)
...MAIS... BIG problem...
TOUT marche sauf un truc : à moment donné, j'ai besoin de remplacer tous
les caractères \ avec la chaine \\.
sous ouinedo, evidement ça marche...
pas sous linux. Or la compilation se passe bien... tout se passe tres
bien... sauf evidement que la recherche du caractere \ ne donne
strictement rien.
dans le détail, voila GROSSO MODO comment je procede:
(je ne remplace pas ici un cara par une chaine, mais le pbm est
EXACTEMENT le meme)
int main(int argc, char *argv[]) { // ------------------------------- au début
et
// ---------------- return 0; } // -------------------- à la fin...
... Mais si tu ne sais pas faire ça, je doute que tu puisses repondre à ma question.
En rajoutant ces bouts de code, ton codene compile pas. Où est défini ta variable _buffer_len_ ? Comment est-elle initialisée ? Si elle est trop grande ton programme risque de planter mais en tout cas il écrira des conneries dans le fichier, et si elle est trop petite, ta boucle ne balayera pas tout le fichier et tu croiras que les ne sont pas traités...
juste un petit detail, pour creer le fichier si necessaire :
int fp=open("mon_fichier",O_RDWR|O_CREAT,...
j'avais oublié le O_CREAT dans mon exemple
Pourquoi créer un fichier que tu lis ?
Oh là là, je crois que tu as de sérieux problèmes sur le codage. Essaye de remettre les choses à plat et de coder en testant les codes de retour, et tu verras qu'en écrivant correctement (avec du code portable qui ne fait aucune erreur de compile bien sûr mais aussi aucun warning).
J'ai refait ton programme en testant les codes, en écrivant les correctement la boucle (regarde la doc du read)... et ça marche sans problème sous unix. Étonnant non.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 1/11/03 23:49, dans <3FA43880.1020809@free.fr>, « david »
<nobody@free.fr> a écrit :
Éric Lévénez wrote:
Le 1/11/03 23:28, dans <3FA43392.3060306@free.fr>, « david »
int main(int argc, char *argv[])
{
// -------------------------------
au début
et
// ----------------
return 0;
}
// --------------------
à la fin...
... Mais si tu ne sais pas faire ça, je doute que tu puisses repondre à
ma question.
En rajoutant ces bouts de code, ton codene compile pas. Où est défini ta
variable _buffer_len_ ? Comment est-elle initialisée ? Si elle est trop
grande ton programme risque de planter mais en tout cas il écrira des
conneries dans le fichier, et si elle est trop petite, ta boucle ne balayera
pas tout le fichier et tu croiras que les ne sont pas traités...
juste un petit detail, pour creer le fichier si necessaire :
int fp=open("mon_fichier",O_RDWR|O_CREAT,...
j'avais oublié le O_CREAT dans mon exemple
Pourquoi créer un fichier que tu lis ?
Oh là là, je crois que tu as de sérieux problèmes sur le codage. Essaye de
remettre les choses à plat et de coder en testant les codes de retour, et tu
verras qu'en écrivant correctement (avec du code portable qui ne fait aucune
erreur de compile bien sûr mais aussi aucun warning).
J'ai refait ton programme en testant les codes, en écrivant les correctement
la boucle (regarde la doc du read)... et ça marche sans problème sous unix.
Étonnant non.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
int main(int argc, char *argv[]) { // ------------------------------- au début
et
// ---------------- return 0; } // -------------------- à la fin...
... Mais si tu ne sais pas faire ça, je doute que tu puisses repondre à ma question.
En rajoutant ces bouts de code, ton codene compile pas. Où est défini ta variable _buffer_len_ ? Comment est-elle initialisée ? Si elle est trop grande ton programme risque de planter mais en tout cas il écrira des conneries dans le fichier, et si elle est trop petite, ta boucle ne balayera pas tout le fichier et tu croiras que les ne sont pas traités...
juste un petit detail, pour creer le fichier si necessaire :
int fp=open("mon_fichier",O_RDWR|O_CREAT,...
j'avais oublié le O_CREAT dans mon exemple
Pourquoi créer un fichier que tu lis ?
Oh là là, je crois que tu as de sérieux problèmes sur le codage. Essaye de remettre les choses à plat et de coder en testant les codes de retour, et tu verras qu'en écrivant correctement (avec du code portable qui ne fait aucune erreur de compile bien sûr mais aussi aucun warning).
J'ai refait ton programme en testant les codes, en écrivant les correctement la boucle (regarde la doc du read)... et ça marche sans problème sous unix. Étonnant non.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
manu
david wrote:
if (buffer[i]=='') buffer[i]='$';
Pour eviter les histoires de backslashes, j'aurai mis
#define BACKSLASH 0x5c if (buffer[i] == BACKSLASH) buffer[i]='$';
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
david <nobody@free.fr> wrote:
if (buffer[i]=='\') buffer[i]='$';
Pour eviter les histoires de backslashes, j'aurai mis
#define BACKSLASH 0x5c
if (buffer[i] == BACKSLASH) buffer[i]='$';
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org
Pour eviter les histoires de backslashes, j'aurai mis
#define BACKSLASH 0x5c if (buffer[i] == BACKSLASH) buffer[i]='$';
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
Pascal Bourguignon
david writes:
salut
voila mon probleme :
je suis en train de développer un ptit programme (rudimentaire) de compression de données. Je l'ai d'abord ecrit sous ouindoz et aujourd'hui, je l'ai porté sous ... LINUX (ouais, yeepeee !!)
...MAIS... BIG problem...
TOUT marche sauf un truc : à moment donné, j'ai besoin de remplacer tous les caractères avec la chaine .
sous ouinedo, evidement ça marche...
pas sous linux. Or la compilation se passe bien... tout se passe tres bien... sauf evidement que la recherche du caractere ne donne strictement rien.
dans le détail, voila GROSSO MODO comment je procede: (je ne remplace pas ici un cara par une chaine, mais le pbm est EXACTEMENT le meme)
voila, je n'ai pas remplacé les par des , les par des $. et ça ne marche pas... aucune occurence de n'est trouvée
ALORS ? QUELQU'UN PEUT-IL M'AIDER ??
Probablement. Il s'appelle man.
man 2 read man 2 write man 2 lseek
Par exemple:
{ off_t position_of_data=lseek(fd,0,SEEK_CUR); size_t read_bytes=read(fd,buffer,sizeof(buffer)); if(read_bytes>0){ size_t written_bytes=0; int offset=0; process(buffer,read_bytes); if(position_of_data!=lseek(fd,position_of_data,SEEK_SET)){ fprintf(stderr,"kseek error %dn",errno); exit(1); } do{ written_chunk=write(fd,buffer+offset,read_bytes-offset); if(written_chunk>0){ written_bytes+=written_chunk; }else if(written_chunk<0){ /* certaines erreurs peuvent ne pas être récupérables, comme EBADF, mais d'autre si, comme ENOSPC, alors on peut ne pas vouloir avorter dans tout les cas. */ fprintf(stderr,"write error %dn",errno); } }while(written_bytes<read_bytes); } }
je suis en train de développer un ptit programme (rudimentaire) de
compression de données. Je l'ai d'abord ecrit sous ouindoz et
aujourd'hui, je l'ai porté sous ... LINUX (ouais, yeepeee !!)
...MAIS... BIG problem...
TOUT marche sauf un truc : à moment donné, j'ai besoin de remplacer
tous les caractères avec la chaine \.
sous ouinedo, evidement ça marche...
pas sous linux. Or la compilation se passe bien... tout se passe tres
bien... sauf evidement que la recherche du caractere ne donne
strictement rien.
dans le détail, voila GROSSO MODO comment je procede:
(je ne remplace pas ici un cara par une chaine, mais le pbm est
EXACTEMENT le meme)
voila, je n'ai pas remplacé les par des \, les par des $.
et ça ne marche pas... aucune occurence de n'est trouvée
ALORS ? QUELQU'UN PEUT-IL M'AIDER ??
Probablement. Il s'appelle man.
man 2 read
man 2 write
man 2 lseek
Par exemple:
{
off_t position_of_data=lseek(fd,0,SEEK_CUR);
size_t read_bytes=read(fd,buffer,sizeof(buffer));
if(read_bytes>0){
size_t written_bytes=0;
int offset=0;
process(buffer,read_bytes);
if(position_of_data!=lseek(fd,position_of_data,SEEK_SET)){
fprintf(stderr,"kseek error %dn",errno);
exit(1);
}
do{
written_chunk=write(fd,buffer+offset,read_bytes-offset);
if(written_chunk>0){
written_bytes+=written_chunk;
}else if(written_chunk<0){
/* certaines erreurs peuvent ne pas être récupérables,
comme EBADF, mais d'autre si, comme ENOSPC, alors
on peut ne pas vouloir avorter dans tout les cas. */
fprintf(stderr,"write error %dn",errno);
}
}while(written_bytes<read_bytes);
}
}
je suis en train de développer un ptit programme (rudimentaire) de compression de données. Je l'ai d'abord ecrit sous ouindoz et aujourd'hui, je l'ai porté sous ... LINUX (ouais, yeepeee !!)
...MAIS... BIG problem...
TOUT marche sauf un truc : à moment donné, j'ai besoin de remplacer tous les caractères avec la chaine .
sous ouinedo, evidement ça marche...
pas sous linux. Or la compilation se passe bien... tout se passe tres bien... sauf evidement que la recherche du caractere ne donne strictement rien.
dans le détail, voila GROSSO MODO comment je procede: (je ne remplace pas ici un cara par une chaine, mais le pbm est EXACTEMENT le meme)
voila, je n'ai pas remplacé les par des , les par des $. et ça ne marche pas... aucune occurence de n'est trouvée
ALORS ? QUELQU'UN PEUT-IL M'AIDER ??
Probablement. Il s'appelle man.
man 2 read man 2 write man 2 lseek
Par exemple:
{ off_t position_of_data=lseek(fd,0,SEEK_CUR); size_t read_bytes=read(fd,buffer,sizeof(buffer)); if(read_bytes>0){ size_t written_bytes=0; int offset=0; process(buffer,read_bytes); if(position_of_data!=lseek(fd,position_of_data,SEEK_SET)){ fprintf(stderr,"kseek error %dn",errno); exit(1); } do{ written_chunk=write(fd,buffer+offset,read_bytes-offset); if(written_chunk>0){ written_bytes+=written_chunk; }else if(written_chunk<0){ /* certaines erreurs peuvent ne pas être récupérables, comme EBADF, mais d'autre si, comme ENOSPC, alors on peut ne pas vouloir avorter dans tout les cas. */ fprintf(stderr,"write error %dn",errno); } }while(written_bytes<read_bytes); } }
poste un code compilable. il n'est pas compilable ce code ?
allons, un peu de sérieux! tu rajoutes
il faut dire que c'est TOI qui a problème et non nous. Cela évite de perdre du temps à chaque fois d'autant plus que tu as des le code tout fait il ne te suffit plus que de copier/coller ici.
-- William.
poste un code compilable.
il n'est pas compilable ce code ?
allons, un peu de sérieux!
tu rajoutes
il faut dire que c'est TOI qui a problème et non nous.
Cela évite de perdre du temps à chaque fois d'autant plus que tu as des
le code tout fait il ne te suffit plus que de copier/coller ici.
poste un code compilable. il n'est pas compilable ce code ?
allons, un peu de sérieux! tu rajoutes
il faut dire que c'est TOI qui a problème et non nous. Cela évite de perdre du temps à chaque fois d'autant plus que tu as des le code tout fait il ne te suffit plus que de copier/coller ici.
-- William.
Éric Lévénez
Le 2/11/03 1:07, dans <1g3rv27.1jyr2302rfboiN%, « Emmanuel Dreyfus » a écrit :
david wrote:
if (buffer[i]=='') buffer[i]='$';
Pour eviter les histoires de backslashes, j'aurai mis
Il n'y a aucun problème avec le ici.
#define BACKSLASH 0x5c if (buffer[i] == BACKSLASH) buffer[i]='$';
Ce code n'est pas portable car tu supposes un encodage ASCII, ce qui n'est pas forcément le cas.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 2/11/03 1:07, dans <1g3rv27.1jyr2302rfboiN%manu@netbsd.org>, « Emmanuel
Dreyfus » <manu@netbsd.org> a écrit :
david <nobody@free.fr> wrote:
if (buffer[i]=='\') buffer[i]='$';
Pour eviter les histoires de backslashes, j'aurai mis
Il n'y a aucun problème avec le ici.
#define BACKSLASH 0x5c
if (buffer[i] == BACKSLASH) buffer[i]='$';
Ce code n'est pas portable car tu supposes un encodage ASCII, ce qui n'est
pas forcément le cas.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.