Здравствуйте использую следующий алгоритм чтобы получить идентификатор тома диска
C++ (Qt)
#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 дисках?