2013-01-17 40 views
1

我想逐字节读取/ etc/passwd文件,并希望在std o/p上显示它。这里是我的代码使用开放系统调用打开/ etc/passwd

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); 

} 

编译正确,但它显示开:成功,为何我不能够显示的内容,是有什么毛病我都做了些什么?

回答

1

if的右括号后面不应该有分号。这是造成这个问题的原因。分号实际上是一个空语句,当条件为真时将执行该语句。由于fd不等于-1,所以调用perror。

+0

傻我,谢谢你 – user1985641

0

的参数putchar()int其具有在unsigned char范围内的值,所以你不应该从文件读取整个int并试图打印一个字符 - 你应该阅读的unsigned char。只需将ch的类型更改为unsigned char即可实现此目的。

if行末尾的额外分号表示您的perror()即使在open()成功时也会出现。