LINUX.ORG.RU

вопрос про запись на диски

 ,


0

1

Здравствуйте использую следующий алгоритм чтобы получить идентификатор тома диска

#include <stdio.h>

#define SEC_SIZE 2048
#define VD_N 16

unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;

    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }

    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }

int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];

    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }

    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {#include <stdio.h>

#define SEC_SIZE 2048
#define VD_N 16

unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;

    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }

    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }

int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];

    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }

    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {
        perror(NULL);
        return 2;
        }

    /* Seek to primary volume descriptor */
    if(fseek(in, VD_N * SEC_SIZE, SEEK_SET) != 0)
        {
        perror(NULL);
        return 2;
        }

    /* Read descriptor */
    if(fread(buf, 1, SEC_SIZE, in) != SEC_SIZE)
        {
        perror(NULL);
        return 2;
        }

    /* Caclculate disc id */
    printf("%08X\n", cdid(buf));

    return 0;
    }

Проблема в том что мне нужно чтобы идентификатор тома полученный с помощью данного алгоритма не менялся так вот идентификатор диска cd-rw не меняется после записи и последующих перезаписей а вот идентификатор диска dvd-rw -меняется при каждом цикле перезаписи. Диски dvd пишу growisofs что можно сделать чтобы идентифкатор полученный с помощью данного метода не менялся и на dvd дисках?

а вот идентификатор диска dvd-rw -меняется при каждом цикле перезаписи

1) индентификатор дисков dvd скорее всего находится по другому адресу

2)какова цель?

next_time ★★★★★ ()
Ответ на: комментарий от nezamudich

Чуть потоньше, а то забанят же.

ты меня наверное неправильно понял. я говорил не про попы, а про то что попы людей мочат палкой.

Pooping ()
Ответ на: комментарий от Pooping

да что такое. вобщем поп берет свою палку и оттуда жидкость брызжет на людей.

Pooping ()
Ответ на: комментарий от next_time

нужно сделать так чтобы идентификатор тома полученный с помощью данного алгоритма не менялся при перезаписи(дозаписи) DVD-RW дисков. Идентификатор CD-RW полученный с помощью данного алгоритма не меняется при перезаписи(дозаписи). Вот нужно чтобы он и не менялся для DVD-RW как то... Смысл что я регистрирую диск в своей ситеме по этому идентификатору(СЗИ) и даю права на данный носитель.. И представьте человек зарегестрировал идентификатор потом записал на диск что-нибудь и идентификатор изменился. И так каждый раз нужно перерегистрировать диск после каждой дозаписи...

kold2015 ()
Ответ на: комментарий от kold2015

человек зарегестрировал идентификатор потом записал на диск что-нибудь и идентификатор изменился.

идентификатор к диску не привязан жёстко, его можно перезаписывать. ничего, что человек в другой программе запишет диск, сменив идентификатор, и будет «ой»?

Вот нужно чтобы он и не менялся для DVD-RW как то...

в вашей программе вы делаете следующее: ищете на диске идентификатор

 fseek(in, VD_N * SEC_SIZE, SEEK_SET), 

а затем его

 if(fread(buf, 1, SEC_SIZE, in) != SEC_SIZE)

читаете. очевидно, в случае DVD, он либо находится по другому адресу, либо вообще не существует.

http://dvdxml.com/p/forum/forum_viewtopic.php?523

вот здесь говорят, что не существует: вместо id dvd используется crc32 сумма от записанных на диск данных, то есть, если верить этой информации, то, что вы хотите, напрямую сделать невозможно.

хотя можно прочитать метаинформацию с dvd, взять от неё crc32 и использовать это число в качестве id-шника, но диски из одной партии данный метод будет распознавать как один и тот же

next_time ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.