2011-12-26 58 views
0

這是我的第二個問題,因爲這個問題導致我遇到了第一個問題。 我有一個文件,我必須閱讀使用read()語句,no no fget()或fread()等 我使用該行。如你所知fileRead是我的filedescriptor,buffer是一個無符號字符,blocksize是緩衝區的大小(我選擇了32); 我的問題是我有一個循環運行,直到文件結束並採取文件(32)的緩衝區,我需要把它放入一個字符串。使用read()並將緩衝區放入一個字符串中

所以我在想,如果你能幫助我的代碼行它會使用緩衝區和追加到一個字符串(不是二維數組,這將不會是好的) 我試圖

openCopyClose(int argc, char ** argv) 
{ 
    int i=0,j=0, k=0, count = 0; 
    size_t blocksize = 32; 
    char fromFile[256], newFile[1000][100], string[100000]; 
    int fileRead; 
    unsigned char buffer[blocksize]; 
    ssize_t status; 

    strcpy(fromFile, argv[1]); 

    fileRead = open(fromFile, O_RDONLY); // open for reading 

    status = 99; 
    while (status > 1)  //while not EOF or error 
    { 
     status = read(fileRead, buffer, blocksize); 
     strcpy(newFile[i], buffer); 

     for(count = 0; count<= 32; count++) 
     { 
      buffer[count] = 0; 
     } 
     i ++;     

     if(status < 0) 
     { 
      printf("oops2\n"); 
      exit(1); 
     } 

    } 
    printf("\n"); 

    for(j = 0; j < i; j++) 
    { 
     printf("%s", newFile[j]); 
    }   
    close(fileRead); 

} 

但是,當我嘗試將它放入結構中時,這不起作用。 我需要該文件到一個字符串使用read()任何想法?

我對strtok的代碼之後將需要看起來像這樣

struct processStruct processes[700]; 
while(count < 701) 
{ 

    processes[count].processNumber = strtok(newFile[0], " \n"); 
    processes[count].quanta = atoi(strtok(NULL, " \n")); 
    processes[count].priority = atoi(strtok(NULL, " \n")); 

    count ++; 
} 

謝謝

+0

你確定你的數據L ine是32字節長?向我們展示正在分析的文件。 – Vovanium 2011-12-26 21:29:49

+0

我通過read命令讀取文件(fileRead,buffer,blocksize)blocksize爲32,那是你想要的嗎?我的問題是將「緩衝區」放入一個字符串 – MrEwok 2011-12-27 11:29:34

回答

0

我解決了如何將文件轉換成字符串,它是相對簡單的,我很驚訝我錯過了

for(k =0; k < sizeof(buffer); k++) 
{ 
    newFile[i] = buffer[k]; 
    i++; 
} 

,現在把它的結構.....

+0

祝賀解決方案。如果可以,請確保將答案標記爲「已接受」,方法是單擊左側的複選標記,以便其他人可以從您的成功中學習。乾杯〜 – 2011-12-27 14:33:57

相關問題