<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[File lesen mit read --&amp;gt;dann wird file gelöscht]]></title><description><![CDATA[<p>hallo leute!</p>
<p>habe bisher nicht allzuviel erfahrung in c/c++ und möchte einen scanner für einen compiler schreiben. leider löscht mein scanner immer mein zu scannedes file.<br />
der code für den scanner ist in c geschrieben und wird mit c++ compiler compiliert.</p>
<p>der code ist leider etwas lange aber wenn ich was auslasse kennt man sich vielleicht nicht aus</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;fcntl.h&gt;

int NO_BLOCKS_MORE=0, ERROR=-1, FILE_END=3;
int BLOCKSIZE=64;

struct charReader {
 char buffer[64];
 char actuelSym;
 int fh;
 int charsIn;
 int pos;
 int row;
 int column;
};
struct charReader reader;
struct charReader lhReader; //lookahead Reader

/*TOKENS*/ 

int tabulator=9;
int newline=10;
int space=32;

int assOp=0; //=
int notOp=1; //!
int addOp =2; //+
int diffOp= 3; //-
int multOp= 4; //*
int divOp= 5;// /
int ifSym = 6; //if
int whileSym=7; //while
int voidSym =8; //void
int intSym =9; //int
int charSym=10; //char
int elseSym=11; //else
int returnSym = 12;//return
int adrOp=13; //&amp;
int externSym=14; //extern
int structSym=15; //struct
int andOp =16;//&amp;&amp;
int orOp=17; //||

int eqOp=18; //==
int modOp=19; //%
int greaterOp=20;//&gt;
int lessOp=21; //&lt;
int greaterEqOp=22; //&gt;=
int lessEqOp=23; //&lt;=
int notEqOp =24; //!=

//klammern
int leftBr=25; //(
int rightBr=26; //)
int lSetBr=27; //{
int rSetBr=28; //}
int lCornerBr=29; //[
int rCornerBr=30; //]
int semikolon=31; //;
int comma=32;//,
int highComma33; //'

struct Token {
 int line,colum;
 int sym;
 int value;
};

/*liest nachsten Block des Files (BLOCKSIZE) in den char array buffer*/
int readNextBlock(){
reader.charsIn=read(reader.fh,reader.buffer,BLOCKSIZE);
reader.pos=0;
if(reader.charsIn==0) return NO_BLOCKS_MORE;
if(reader.charsIn==-1) return ERROR;
}

/*liefert nächstes char eines Files wenn verwendeter Buffer gelesen wird Methode
* readNextBlock aufgerufen um nachsten Block aus File zu lesen
* Wenn Buffer zu Ende gelesen und keine weiteren Blöcke vorhanden --&gt;FILE_END */
void getNextSym(){
 if(reader.pos==reader.charsIn){
  int readNext=readNextBlock();
  if(readNext==NO_BLOCKS_MORE){
   reader.actuelSym= FILE_END; //TODO return FILE_END
  // return;
  }
  if(readNext==ERROR){
   reader.actuelSym =ERROR;
  // return;
 }
 }

 if(reader.actuelSym!=FILE_END &amp;&amp; reader.actuelSym!=ERROR){

 reader.actuelSym= reader.buffer[reader.pos];
 reader.pos++;
 reader.column++;
 }

}

//lookahead
/*liest nachsten Block des Files (BLOCKSIZE) in den char array buffer*/
int readNextBlock2(){
lhReader.charsIn=read(lhReader.fh,lhReader.buffer,BLOCKSIZE);
lhReader.pos=0;
if(lhReader.charsIn==0) return NO_BLOCKS_MORE;
if(lhReader.charsIn==-1) return ERROR;
}

/*liefert nächstes char eines Files wenn verwendeter Buffer gelesen wird Methode
* readNextBlock aufgerufen um nachsten Block aus File zu lesen
* Wenn Buffer zu Ende gelesen und keine weiteren Blöcke vorhanden --&gt;FILE_END */
void getNextSym2(){
 if(lhReader.pos==lhReader.charsIn){
  int readNext2=readNextBlock2();
  if(readNext2==NO_BLOCKS_MORE){
   lhReader.actuelSym= FILE_END; //TODO return FILE_END
  // return;
  }
  if(readNext2==ERROR){
   lhReader.actuelSym =ERROR;
  // return;
 }
 }

 if(lhReader.actuelSym!=FILE_END &amp;&amp; lhReader.actuelSym!=ERROR){

 lhReader.actuelSym= lhReader.buffer[lhReader.pos];
 lhReader.pos++;

 }

}
//END lookahead

int isDigit(char sym){
 if(sym&gt;='0' &amp;&amp; sym &lt;='9'){
 return 1;
 }
 else return 0;
}

int isLetter(char sym){
 if((sym&gt;='a' &amp;&amp; sym &lt;='z') || (sym&gt;='A' &amp;&amp; sym &lt;='Z')){
 return 1;
 }
 else return 0;
}

int isIgnoreToken(char sym){
 if(sym==newline){
 reader.row++;
 reader.column=0;
 return 1;
 }
 if(sym==tabulator||sym==space){
 return 1;
 }
 else return 0;

}

int number(){
 int sym;
 int val=0;

 val= reader.actuelSym -'0';
 while(isDigit(lookAhead())){ //LookAHead
 val= 10*val +reader.actuelSym -'0';
 }

 return val;
}

struct Token getNextToken(){
}

void testIT(){
}

void writeToLogFile(){
}

int main() {

 reader.charsIn=0;
 reader.column=0;
 reader.pos=0;
 reader.row=0;

 lhReader.charsIn=0;
 lhReader.pos=0;

 printf(&quot;fh: %d\n&quot;,reader.fh);

 //int fhWrite= open(&quot;test.txt&quot;,&quot;rw&quot;);
 //write(fhWrite,&quot;ddddfgd&quot;,4); 

 char fileN[]=&quot;scanner.c&quot;;
 //init(fileN);
 int more=1;
 reader.fh=open(fileN,'r');
 lhReader.fh=open(fileN,'r');//lookaheda

 printf(&quot;fh: %d\n&quot;,reader.fh);

 if(reader.fh==NO_BLOCKS_MORE) printf(&quot;FILE empty&quot;);
 if(reader.fh==ERROR) printf(&quot;ERROR&quot;);

 printf(&quot;[%d,%d]&quot;, reader.row,reader.column);
 printf(&quot;__&quot;);
 getNextSym2();
 while(more &amp;&amp; reader.fh!=ERROR){

  //actuelChar=getNextSym();
  getNextSym(); 
  getNextSym2();
  //charsIn=read(fh,buffer,64);

  //printf(&quot;[%d,%d]&quot;, row,column);

  if(reader.actuelSym==FILE_END ){
  more=0;
  printf(&quot;__________________________FILE_END___________&quot;);
  }
  /*else if(isIgnoreToken(actuelSym)){
  printf(&quot;%c&quot;,actuelSym);
  }
  else if(isDigit(actuelSym)){
  //printf(&quot;%d &quot;,number());
  printf(&quot;%c&quot;,actuelSym);
  }*/
  else if(1){
  printf(&quot;%c&quot;,reader.actuelSym);//putchar(ne);
  printf(&quot;%c&quot;,lhReader.actuelSym);//putchar(ne);
  //printf(&quot;%c&quot;,lookAhead());//putchar(ne);
  //lookAhead();
  }
  //write(buffer,charsIn);
  //printf(&quot;\n&quot;);
  //printf(&quot;in= %d\n&quot;,charsIn);
  //if(charsIn==0)more =0;

 } 
 close(reader.fh);
 close(lhReader.fh);

 return 0;
}
</code></pre>
<p>vielen Dank<br />
zippwoo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143603/file-lesen-mit-read-gt-dann-wird-file-gelöscht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 06:48:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143603.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Apr 2006 08:58:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to File lesen mit read --&amp;gt;dann wird file gelöscht on Mon, 10 Apr 2006 09:15:47 GMT]]></title><description><![CDATA[<p>hallo leute!</p>
<p>habe bisher nicht allzuviel erfahrung in c/c++ und möchte einen scanner für einen compiler schreiben. leider löscht mein scanner immer mein zu scannedes file.<br />
der code für den scanner ist in c geschrieben und wird mit c++ compiler compiliert.</p>
<p>der code ist leider etwas lange aber wenn ich was auslasse kennt man sich vielleicht nicht aus</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;fcntl.h&gt;

int NO_BLOCKS_MORE=0, ERROR=-1, FILE_END=3;
int BLOCKSIZE=64;

struct charReader {
 char buffer[64];
 char actuelSym;
 int fh;
 int charsIn;
 int pos;
 int row;
 int column;
};
struct charReader reader;
struct charReader lhReader; //lookahead Reader

/*TOKENS*/ 

int tabulator=9;
int newline=10;
int space=32;

int assOp=0; //=
int notOp=1; //!
int addOp =2; //+
int diffOp= 3; //-
int multOp= 4; //*
int divOp= 5;// /
int ifSym = 6; //if
int whileSym=7; //while
int voidSym =8; //void
int intSym =9; //int
int charSym=10; //char
int elseSym=11; //else
int returnSym = 12;//return
int adrOp=13; //&amp;
int externSym=14; //extern
int structSym=15; //struct
int andOp =16;//&amp;&amp;
int orOp=17; //||

int eqOp=18; //==
int modOp=19; //%
int greaterOp=20;//&gt;
int lessOp=21; //&lt;
int greaterEqOp=22; //&gt;=
int lessEqOp=23; //&lt;=
int notEqOp =24; //!=

//klammern
int leftBr=25; //(
int rightBr=26; //)
int lSetBr=27; //{
int rSetBr=28; //}
int lCornerBr=29; //[
int rCornerBr=30; //]
int semikolon=31; //;
int comma=32;//,
int highComma33; //'

struct Token {
 int line,colum;
 int sym;
 int value;
};

/*liest nachsten Block des Files (BLOCKSIZE) in den char array buffer*/
int readNextBlock(){
reader.charsIn=read(reader.fh,reader.buffer,BLOCKSIZE);
reader.pos=0;
if(reader.charsIn==0) return NO_BLOCKS_MORE;
if(reader.charsIn==-1) return ERROR;
}

/*liefert nächstes char eines Files wenn verwendeter Buffer gelesen wird Methode
* readNextBlock aufgerufen um nachsten Block aus File zu lesen
* Wenn Buffer zu Ende gelesen und keine weiteren Blöcke vorhanden --&gt;FILE_END */
void getNextSym(){
 if(reader.pos==reader.charsIn){
  int readNext=readNextBlock();
  if(readNext==NO_BLOCKS_MORE){
   reader.actuelSym= FILE_END; //TODO return FILE_END
  // return;
  }
  if(readNext==ERROR){
   reader.actuelSym =ERROR;
  // return;
 }
 }

 if(reader.actuelSym!=FILE_END &amp;&amp; reader.actuelSym!=ERROR){

 reader.actuelSym= reader.buffer[reader.pos];
 reader.pos++;
 reader.column++;
 }

}

//lookahead
/*liest nachsten Block des Files (BLOCKSIZE) in den char array buffer*/
int readNextBlock2(){
lhReader.charsIn=read(lhReader.fh,lhReader.buffer,BLOCKSIZE);
lhReader.pos=0;
if(lhReader.charsIn==0) return NO_BLOCKS_MORE;
if(lhReader.charsIn==-1) return ERROR;
}

/*liefert nächstes char eines Files wenn verwendeter Buffer gelesen wird Methode
* readNextBlock aufgerufen um nachsten Block aus File zu lesen
* Wenn Buffer zu Ende gelesen und keine weiteren Blöcke vorhanden --&gt;FILE_END */
void getNextSym2(){
 if(lhReader.pos==lhReader.charsIn){
  int readNext2=readNextBlock2();
  if(readNext2==NO_BLOCKS_MORE){
   lhReader.actuelSym= FILE_END; //TODO return FILE_END
  // return;
  }
  if(readNext2==ERROR){
   lhReader.actuelSym =ERROR;
  // return;
 }
 }

 if(lhReader.actuelSym!=FILE_END &amp;&amp; lhReader.actuelSym!=ERROR){

 lhReader.actuelSym= lhReader.buffer[lhReader.pos];
 lhReader.pos++;

 }

}
//END lookahead

int isDigit(char sym){
 if(sym&gt;='0' &amp;&amp; sym &lt;='9'){
 return 1;
 }
 else return 0;
}

int isLetter(char sym){
 if((sym&gt;='a' &amp;&amp; sym &lt;='z') || (sym&gt;='A' &amp;&amp; sym &lt;='Z')){
 return 1;
 }
 else return 0;
}

int isIgnoreToken(char sym){
 if(sym==newline){
 reader.row++;
 reader.column=0;
 return 1;
 }
 if(sym==tabulator||sym==space){
 return 1;
 }
 else return 0;

}

int number(){
 int sym;
 int val=0;

 val= reader.actuelSym -'0';
 while(isDigit(lookAhead())){ //LookAHead
 val= 10*val +reader.actuelSym -'0';
 }

 return val;
}

struct Token getNextToken(){
}

void testIT(){
}

void writeToLogFile(){
}

int main() {

 reader.charsIn=0;
 reader.column=0;
 reader.pos=0;
 reader.row=0;

 lhReader.charsIn=0;
 lhReader.pos=0;

 printf(&quot;fh: %d\n&quot;,reader.fh);

 //int fhWrite= open(&quot;test.txt&quot;,&quot;rw&quot;);
 //write(fhWrite,&quot;ddddfgd&quot;,4); 

 char fileN[]=&quot;scanner.c&quot;;
 //init(fileN);
 int more=1;
 reader.fh=open(fileN,'r');
 lhReader.fh=open(fileN,'r');//lookaheda

 printf(&quot;fh: %d\n&quot;,reader.fh);

 if(reader.fh==NO_BLOCKS_MORE) printf(&quot;FILE empty&quot;);
 if(reader.fh==ERROR) printf(&quot;ERROR&quot;);

 printf(&quot;[%d,%d]&quot;, reader.row,reader.column);
 printf(&quot;__&quot;);
 getNextSym2();
 while(more &amp;&amp; reader.fh!=ERROR){

  //actuelChar=getNextSym();
  getNextSym(); 
  getNextSym2();
  //charsIn=read(fh,buffer,64);

  //printf(&quot;[%d,%d]&quot;, row,column);

  if(reader.actuelSym==FILE_END ){
  more=0;
  printf(&quot;__________________________FILE_END___________&quot;);
  }
  /*else if(isIgnoreToken(actuelSym)){
  printf(&quot;%c&quot;,actuelSym);
  }
  else if(isDigit(actuelSym)){
  //printf(&quot;%d &quot;,number());
  printf(&quot;%c&quot;,actuelSym);
  }*/
  else if(1){
  printf(&quot;%c&quot;,reader.actuelSym);//putchar(ne);
  printf(&quot;%c&quot;,lhReader.actuelSym);//putchar(ne);
  //printf(&quot;%c&quot;,lookAhead());//putchar(ne);
  //lookAhead();
  }
  //write(buffer,charsIn);
  //printf(&quot;\n&quot;);
  //printf(&quot;in= %d\n&quot;,charsIn);
  //if(charsIn==0)more =0;

 } 
 close(reader.fh);
 close(lhReader.fh);

 return 0;
}
</code></pre>
<p>vielen Dank<br />
zippwoo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034317</guid><dc:creator><![CDATA[zipwoo]]></dc:creator><pubDate>Mon, 10 Apr 2006 09:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to File lesen mit read --&amp;gt;dann wird file gelöscht on Mon, 10 Apr 2006 09:13:11 GMT]]></title><description><![CDATA[<p>ähem, jo, also wenn du jetzt noch [cpp ][/cpp ] Tags (ohne die Leerzeichen) um den Code bastelst, dann liest es sich vllt. einer durch...</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034321</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 10 Apr 2006 09:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to File lesen mit read --&amp;gt;dann wird file gelöscht on Mon, 10 Apr 2006 09:17:12 GMT]]></title><description><![CDATA[<p>Kannst du das Problem mal etwas eingrenzen? Tritt es noch auf, wenn du die Datei nur öffnest und wieder schließt?</p>
<p>PS: Bitte pack deinen Quelltext in cpp-Tags, das erleichtert anderen die Fehlersuche etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034324</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 10 Apr 2006 09:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to File lesen mit read --&amp;gt;dann wird file gelöscht on Mon, 10 Apr 2006 09:29:37 GMT]]></title><description><![CDATA[<p>danke erstmal für die schnelle antwort<br />
hatte gestern schon einige male diesen fehler, da kam der fehler wenn ich nur eine kleinigkeit im code änderte, zB: irgendwo ein printf(&quot;bla&quot;); hinzugefügte, was ja schon eigenartig ist.<br />
doch jetzt tritt der fehler immer auf, wenn das file geöffnet und gelesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034332</guid><dc:creator><![CDATA[zipwoo]]></dc:creator><pubDate>Mon, 10 Apr 2006 09:29:37 GMT</pubDate></item></channel></rss>