我想一个字节一个字节地读取/etc/passwd文件,并希望在std o/p上显示它。这是我的代码
void main(int argc, char *argv[])
{
int fd, ch;
int ret;
if((fd = open("/etc/passwd",O_RDONLY)) == -1);
perror("open");
while((ret = read(fd, &ch, sizeof(ch))) != 0)
putchar(ch);
}
它编译正确,但它显示打开:成功,为什么我不能显示内容,是我做错了什么吗?
if的右括号后面不应该有分号。这就是问题的根源。分号实际上是一个空语句,当条件为真时将执行该语句。因为fd不等于-1,所以调用error
putchar()
的参数是int
,其值在unsigned char
的范围内,因此您不应该从文件中读取整个int
并试图将其打印为一个字符-您应该读取unsigned char
。您可以通过将ch
的类型更改为unsigned char
来实现这一点。
if
行末尾的额外分号是为什么即使open()
成功,perror()
也会出现的原因。