【发布时间】:2013-01-02 09:10:20
【问题描述】:
如何让程序读取“partSize”字节数并将其打印到屏幕上?假设我正在打开一个总共包含 100 个字符的文本文件。如果 partSize 是 50 字节,我希望在屏幕上打印 50 个字符。
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#define PERMS 0777
int main(int argc, char *argv[])
{
int createDescriptor;
int openDescriptorOriginal;
int closeCreateDescriptor;
//char fileNameOriginal[] = "picture.jpg";
char fileNameOriginal[] = "myFile.txt";
int parts;
int partSize;
parts=2;
int bytesRemaining;
int partNumber;
char BUFFER[512];
int readDescriptor;
if ((openDescriptorOriginal = open(fileNameOriginal, O_RDONLY )) == -1)
{
printf("Error opening %s", fileNameOriginal);
exit(EXIT_FAILURE);
}
struct stat buf;
int r = fstat(openDescriptorOriginal, &buf);
if (r)
{
fprintf(stderr, "error: fstat: %s\n", (char *) strerror(errno));
exit(1);
}
int originalFileSize = buf.st_size;
printf("The file is %.9f Kilobytes large.\n", (double) originalFileSize/1024);
partSize = ((originalFileSize + parts) + 1)/parts;
//I am stuck at this part
while ((readDescriptor = read(openDescriptorOriginal, BUFFER, partSize)) < partSize))
{
write(1, BUFFER, readDescriptor);
}
if ((closeCreateDescriptor = close(openDescriptorOriginal)) == -1)
{
printf("Error closing file.\n");
}
return 0;
}
【问题讨论】:
-
您应该使用较小的标识符。
openDescriptorOriginal很快就会变得笨拙。 -
partSize 的值是你期望的吗?你调试过你的程序吗?似乎读/写位是正确的(尽管 readDescriptor 对您使用它的内容具有很大的误导性)。
-
是的,partSize 似乎是正确的值。
-
你阅读的文件中的所有字符都可以显示吗?另外,您得到的符号是否比预期的要多或少?
-
您可能希望使用选项
-Wall -g编译您的源代码,修复所有警告,然后学习并使用gdb来跟踪和调试您的程序。