我创建了一个打开文件并读取它们的单个字符的函数。
int getBlocks(char *file){
char c;
int line = 0;
int pos = 0;
int blocks;
FILE *inptr = fopen(file, "rt");
// Count the amount of blocks/tetriminos
while((c=fgetc(inptr))!=EOF){
if(c == '.' || c == '#'){
pos++;
if(pos == 4){
pos = 0;
line++;
}
}
}
blocks = (line/4);
fclose(inptr);
return blocks;
}
现在我必须改写它,因为我允许使用的唯一功能是exit
,open
,close
,write
,read
,malloc
和free
。
我想我基本上可以使用int inptr = open(file, O_RDONLY);
而不是我的fopen
线,而只是close(inptr);
而不是我的fclose
函数。
我现在唯一的问题是fgetc
。我很确定我可以在这里使用read
,但根据它的定义ssize_t read(int fildes, void *buf, size_t nbytes);
我需要事先告诉固定数量的字节,但文件大小在我的情况下总是不同的。
你知道我怎么能在这里重写fgetc
吗?
这与微小的变化非常相似
char chr;
int fd = open(file, O_RDONLY);
if (fd == -1)
reutnr -1; // Or some error integer
while (read(fd, &chr, 1) == 1) {
/* the rest of your code */
}
close(fd);
请注意,一个重要的变化是chr
的类型是char
而不是int
。
您只需检查EOF
是否返回了合适的值,而不是检查read()
,理想情况下,您应将其存储在某处,并在循环结束时检查它是0
,这意味着文件已到达,否则会发生错误。