dvdinfo.c
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:2k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.  * A noddy program for getting and printing some info from the
  3.  * DVD-ROM drive.
  4.  */
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #if defined(__OpenBSD__)
  8. # include <sys/dvdio.h>
  9. #elif defined(__linux__)
  10. # include <linux/cdrom.h>
  11. #else
  12. # error "Need the DVD ioctls"
  13. #endif
  14. #include <sys/ioctl.h>
  15. #include <errno.h>
  16. #define DVD "/dev/cdrom"
  17. int GetASF(int fd)
  18. {
  19. dvd_authinfo ai;
  20. ai.type = DVD_LU_SEND_ASF;
  21. ai.lsasf.agid = 0;
  22. ai.lsasf.asf = 0;
  23. if (ioctl(fd, DVD_AUTH, &ai)) {
  24. printf("GetASF failedn");
  25. return 0;
  26. }
  27. printf("%sAuthenticatedn", (ai.lsasf.asf) ? "" : "not ");
  28. return 1;
  29. }
  30. int GetPhysical(int fd)
  31. {
  32. dvd_struct d;
  33. int layer = 0, layers = 4;
  34. d.physical.type = DVD_STRUCT_PHYSICAL;
  35. while (layer < layers) {
  36. d.physical.layer_num = layer;
  37. if (ioctl(fd, DVD_READ_STRUCT, &d)<0)
  38. {
  39. printf("Could not read Physical layer %dn", layer);
  40. return 0;
  41. }
  42. layers = d.physical.layer[layer].nlayers + 1;
  43. printf("Layer %d[%d]n", layer, layers);
  44. printf(" Book Version:   %dn", d.physical.layer[layer].book_version);
  45. printf(" Book Type:      %dn", d.physical.layer[layer].book_type);
  46. printf(" Min Rate:       %dn", d.physical.layer[layer].min_rate);
  47. printf(" Disk Size:      %dn", d.physical.layer[layer].disc_size);
  48. printf(" Layer Type:     %dn", d.physical.layer[layer].layer_type);
  49. printf(" Track Path:     %dn", d.physical.layer[layer].track_path);
  50. printf(" Num Layers:     %dn", d.physical.layer[layer].nlayers);
  51. printf(" Track Density:  %dn", d.physical.layer[layer].track_density);
  52. printf(" Linear Density: %dn", d.physical.layer[layer].linear_density);
  53. printf(" BCA:            %dn", d.physical.layer[layer].bca);
  54. printf(" Start Sector    %#xn", d.physical.layer[layer].start_sector);
  55. printf(" End Sector      %#xn", d.physical.layer[layer].end_sector);
  56. printf(" End Sector L0   %#xn", d.physical.layer[layer].end_sector_l0);
  57. ++layer;
  58. }
  59. return 1;
  60. }
  61. int GetCopyright(int fd)
  62. {
  63. dvd_struct d;
  64. d.copyright.type = DVD_STRUCT_COPYRIGHT;
  65. d.copyright.layer_num = 0;
  66. if (ioctl(fd, DVD_READ_STRUCT, &d)<0)
  67. {
  68. printf("Could not read Copyright Structn");
  69. return 0;
  70. }
  71. printf("Copyright: CPST=%d, RMI=%#02xn", d.copyright.cpst, d.copyright.rmi);
  72. return 1;
  73. }
  74. int main(int ac, char **av)
  75. {
  76. int fd;
  77. char *device = DVD;
  78. if (ac > 1)
  79. device = av[1];
  80. fd = open(device, O_RDONLY | O_NONBLOCK);
  81. if (fd < 0) {
  82. printf("unable to open dvd drive (%s).n", device);
  83. return 1;
  84. }
  85. GetASF(fd);
  86. GetPhysical(fd);
  87. GetCopyright(fd);
  88. return 0;
  89. }