c - 来自 fread 的错误文件描述符

标签 c file io file-descriptor file-pointer

我尝试使用 read() 从文件中获取一些字符只是为了学习这个 API。我在同一目录中创建了一个名为"file"的文件,它包含 1000 个字符。但是我收到一条错误消息:

read: %m: Bad file descriptor

代码如下:

#include <stdio.h>
#include <error.h>

int read_indent(int sockfd){
  int sport, cport;
  char user[2], rtype[2], addinfo[2];
  char buffer[17];

  if(read(sockfd, buffer, sizeof(buffer)) <= 0) {
    perror("read: %m");
    return -1;
  }

  buffer[sizeof(buffer)-1] = '\0';

  sscanf(buffer, "%d:%d:%s:%s:%s", &sport, &cport, rtype, user, addinfo);
  printf("%d:%d:%s:%s:%s", sport, cport, rtype, user, addinfo);
  return 0;
}

int main(){
  FILE *file_pt = fopen("file", "r");
  if(file_pt == NULL) { printf("fopen error\n"); return -1;}
  char buf[128];
  int a = read_indent(file_pt);
  fclose(file_pt);
  return 0;
}

更新 1:编译信息

test.c: In function ‘main’:
test.c:27:2: warning: passing argument 1 of ‘read_indent’ makes integer from pointer without a cast [enabled by default]
  int a = read_indent(file_pt);
  ^
test.c:4:5: note: expected ‘int’ but argument is of type ‘struct FILE *’
 int read_indent(int sockfd){

最佳答案

您的read_indent 函数接受一个文件描述符,但您传递的是一个FILE* 指针。尝试使用 filenoFILE* 指针转换为文件描述符:

int a = read_indent(fileno(file_pt));

关于c - 来自 fread 的错误文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050943/

相关文章:

python - 为什么多个进程会变慢?

java - 读取文件并打印字符串和整数的平均值

c - 以错误的方式调用函数(序列的总和)

python - 遍历 Python 目录中的无限文件

c - 退出时是否应该释放分配的内存?

java - 使用 xPath 修改 XML 文件

c++ - 并发追加到文件:写入丢失

java - 读取文件中所有剩余字节

c# - TT c-> c# Ho 处理 typedef 枚举

c++ - strincmp 的预期行为是什么?