使用open系统调用打开/etc/passwd



我想一个字节一个字节地读取/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()也会出现的原因。

最新更新