1

我想逐字节读取 /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);

}

它编译正确,但显示打开:成功,为什么我无法显示内容,我做错了什么吗?

4

2 回答 2

1

if 的右括号后不应有分号。这就是问题所在。分号实际上是一个空语句,将在条件为真时执行。由于 fd 不等于 -1,因此调用了 perror。

于 2013-01-17T01:45:23.920 回答
0

to 的参数putchar()int一个值在 范围内的值unsigned char,因此您不应该int从文件中读取整个文件并尝试将其打印为一个字符 - 您应该读取unsigned char. 您可以通过更改 to 的类型来实现这ch一点unsigned char

行尾的额外分号是即使成功也会出现的if原因。perror()open()

于 2013-01-17T01:48:22.863 回答