我们已经为系统编程分配了一个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