1

我正在尝试编写一个简单的程序来从文件中读取并在终端中打印它。但是程序在打开文件后挂起。如果我删除阅读部分,它工作得很好。我不知道出了什么问题。有人可以帮忙吗?请!

#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  int fd,bytes;
  char buffer[10];
  char path[ ] = "file";

  if(fd = open(path, O_RDONLY) < 0) {
    perror("open");
    exit(EXIT_FAILURE);

  } else {
    printf("opened %s\n", path);
  }

  do {
    bytes = read(fd,buffer,10);
    printf("%d", bytes);
  } while( bytes > 0);

  if(close(fd) < 0) {
    perror("close");exit(EXIT_FAILURE);
  } else{
    printf("closed %s\n", path);
  }
  exit(EXIT_SUCCESS);
}
4

2 回答 2

4
if(fd = open(path, O_RDONLY) < 0) {

这被解析为:

if(fd = (open(path, O_RDONLY) < 0)) {

将 0 或 1 分配给fd. 您需要一组额外的括号:

if((fd = open(path, O_RDONLY)) < 0) {

或者更好,写成两行。

fd = open(...);
if (fd < 0) {
于 2012-11-15T19:59:50.533 回答
2

因此,首先,如果“文件”存在,您的程序如 Mat 所解释的将 0 分配给 fd。连续读取从标准输入读取。这可以解释为“挂起”,但实际上您的程序只是从标准输入读取,并且您的 printf 没有显示,因为最后没有 \n。如果您将其更改为

do {
  bytes = read(fd,buffer,10);
  printf("%d", bytes);
  fflush (stdout);
} while( bytes > 0);

然后你会看到会发生什么......干杯。

于 2012-11-15T20:16:15.067 回答