我們已經爲系統編程分配了一個ASCII壓縮項目,並且我在代碼中遇到了一個特定的行。搞清楚在Unix中寫入
我問了一個關於壓縮的question,並且我在通過紙張上的示例文件的前十幾個字母處理之後,將數組代碼調整到了我的程序中。在ddd中,packed[]
數組的值是我在紙上創建的值,但值不會寫入文件。
unsigned char packed[7]; //compression storage
int i, jCount;
int j;
int bufferLength= sizeof(unpacked)/sizeof(char);
//loop through the buffer array
for (i=0; i< bufferLength-1; i++){
j= i%7;
jCount++;
//fill up the compressed array
packed[i]= packer(unpacked[i], unpacked[i+1], j);
//compressed array is full, write to file, then clear
if ((j%7==6) && (j > 1)){
int writeLoop;
for (writeLoop=0; writeLoop < 8; writeLoop++){
//printf("%X", packed[writeLoop]); //write to screen
write(openWriteFile, &packed[writeLoop], 1);//this is my trouble, write to file
}
memset(&packed[0], 0, sizeof(packed)); //clear array
}
//more code down here for padding the end of short bytes.
寫函數需要const void *
作爲第二個參數,這就是爲什麼我引用的是特定的陣列槽的值,但沒有數據被寫入到文件中。
當我刪除&時,出現編譯警告。
任何建議讓我走下正確的道路,表示讚賞。
對於初學者,'packed'只有7個字節,但是你的輸出循環迭代8次。此外,你不應該需要一個循環; 'write(openWriteFile,packed,8)'應該可以工作。 – chrisaycock 2011-03-02 05:22:43
如果系統調用看起來失敗,檢查返回值並且可能依次錯誤地返回是一個好主意。而對於系統編程家庭作業,這樣做並持續報告可能會獲得額外的分數。 – Keith 2011-03-02 05:32:21
@ chrisaycock,根本沒有變化。我有一個'write(openWriteFile,&fileSize,4)'聲明來將原始文件大小寫入壓縮文件,並且它將'int fileSize'完全寫入文件。 @Keith,當我打開寫入文件時,它會以適當的權限創建,因爲rw顯示在'ls -l'輸出中。我有內置的錯誤處理,但錯誤只顯示爲負數,'writeOpenFile'是一個正整數。 – Jason 2011-03-02 05:36:12