2013-12-13 63 views
0

我使用的是普通的C,並試圖讀取流設備數據(單個磁帶)Linux中,讀取磁帶設備

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字節

+0

檢查fopen'的'的返回值。 – Kninnug

+0

準確的代碼是什麼? – alk

+0

如果您執行'cat/dev/st0> myfile',它會起作用嗎? – Devolus

回答

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; 
} 
+0

不,刪除。 @Shahbaz – alk

+0

我只是好奇 – Shahbaz

+0

可能是編寫宏時攜帶帶有額外括號的框的習慣。 @Shahbaz – alk