Linux,读取磁带设备

时间:2013-12-13 14:18:06

标签: c linux

我正在使用普通C并尝试从流设备(单个磁带)读取数据

size_t res=0;
size_t total=0;
char data[512];
FILE *f = fopen("/dev/st0","r");
if(!f)
{
    perror ("Error:");
    printf( "Value: %d\n", errno );
    return;
}
while((res=fread(data,1, sizeof data,f))>0)
{
    total+=res;
}
fclose(f);
printf("read: %ld bytes\n", total);

这种方法不起作用,所以我认为应该有一些特定的方法来做到这一点 我没有在谷歌找到有用的东西。可能是mt工具的源代码可以帮助,但它也不会读/写磁带。

结果是
读:0字节

1 个答案:

答案 0 :(得分:3)

要从指定的设备读取第一个sizeof(data)字节(如果有),请执行以下操作:

#define _POSIX_SOURCE /* for ferror */

#include <stdio.h>

#define DEVICENAME "/dev/st0"

int main(void)
{
  int result = EXIT_SUCCESS; /* Be optimistic. */

  size_t total = 0;
  char data[1024];

  FILE * f = fopen(DEVICENAME, "r");
  if (NULL == f)
  {
    fprintf(stderr, "Failed to open '%s'.\n", DEVICENAME);
    result = EXIT_FAILURE;
  }
  else 
  {
    total = fread(data, 1, sizeof(data), f);
    if (ferror(f))
    {
      fprintf(stderr, "Error reading from '%s'.\n", DEVICENAME);
      result = EXIT_FAILURE;
    }  

    fclose(f);
  }

  printf("Read %zd bytes from '%s'.\n", total, DEVICENAME);

  return result;
}