⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvd-ram-control.cpp

📁 最新的linux下dvd刻录软件,支持DVD+RW、DVD-RW光盘刻录。
💻 CPP
字号:
#include "transport.hxx"int main (int argc,char *argv[]){ Scsi_Command cmd;  unsigned char buf[128],erb=0;  int err,i,rdonly=0;  const char *dev=NULL;    for (i=1;i<argc;i++)    {	if	(!strncmp (argv[i],"-arre",4))		erb|=0x40;	else if	(!strncmp (argv[i],"-awre",4))		erb|=0x80;	else if	(!strncmp (argv[i],"-rdonly",4))	rdonly=1;	else if (!strncmp (argv[i],"-rdwr",4))		rdonly=-1;	else if	(!strncmp (argv[i],"-rw",3))		rdonly=-1;	else if (!strncmp (argv[i],"-wronly",3))	rdonly=-1;	else						dev=argv[i];    }    if (!(dev && (erb || rdonly)))    {	fprintf (stderr,"usage: %s [-arre] [-awre] [-rdonly|-rdwr] /dev/dvd\n",			argv[0]);	return 1;    }    if (!cmd.associate (dev))    {	fprintf (stderr,"%s: unable to open: ",dev), perror (NULL);	return 1;    }    cmd[0] = 0x12;	// INQUIRY    cmd[4] = 36;    cmd[5] = 0;    if ((err=cmd.transport(READ,buf,36)))    {	sperror ("INQUIRY",err);	return 1;    }    if ((buf[0]&0x1F) != 5)    {	fprintf (stderr,":-( not an MMC unit!\n");	return 1;    }#if 0    cmd[0]=0x46;	// GET CONFIGURATION    cmd[1]=1;    cmd[8]=8;    cmd[9]=0;    if ((err=cmd.transport(READ,buf,8)))    {	sperror ("GET CONFIGURATION",err);	return 1;    }    if ((buf[6]<<8|buf[7]) != 0x12)    {   fprintf (stderr,":-( not DVD-RAM!\n");	return 1;    }#endif    if (erb) do    { unsigned char page01[8+12];	cmd[0]=0x5A;		// MODE SENSE	cmd[1]=0x08;		// "Disable Block Descriptors"	cmd[2]=1;		// Page 01	cmd[8]=sizeof(page01);	if ((err=cmd.transport(READ,page01,sizeof(page01))))	{   sperror("MODE SENSE",err); return 1;   }	if ((page01[8+2]&erb) == erb)	{   printf ("A[RW]RE bit is set already.\n");	    break;	}	memset (page01,0,8);	page01[8+2]|=erb;	// A[WR]RE on	cmd[0]=0x55;	// MODE SELECT	cmd[1]=0x10;	// conformant	cmd[8]=sizeof(page01); 	cmd[9]=0;	if ((err=cmd.transport(WRITE,page01,sizeof(page01))))	{   sperror("MODE SELECT",err); return 1;   }	// Verify settings...	cmd[0]=0x5A;		// MODE SENSE	cmd[1]=0x08;		// "Disable Block Descriptors"	cmd[2]=1;		// Page 01	cmd[8]=sizeof(page01);	if ((err=cmd.transport(READ,page01,sizeof(page01))))	{   sperror("MODE SENSE",err); return 1;   }	if ((page01[8+2]&erb) != erb)	{   fprintf (stderr,":-( failed to set A[RW]RE bit.\n");	    return 1;	}    } while (0);    if (rdonly) do    { unsigned char dvd_C0[8];	cmd[0]=0xAD;	// READ DVD STRUCTURE	cmd[7]=0xC0;	cmd[9]=sizeof(dvd_C0);	cmd[11]=0;	if ((err=cmd.transport(READ,dvd_C0,sizeof(dvd_C0))))	{   sperror("READ DVD STRUCTURE#C0",err); return 1;   }	if (rdonly>0 && (dvd_C0[4]&0x02))	{   printf ("The disc is write protected already.\n");	    break;	}	else if (rdonly<0 && !(dvd_C0[4]&0x02))	{   printf ("The disc is unprotected already.\n");	    break;	}	memset (dvd_C0,0,sizeof(dvd_C0));	dvd_C0[1]=6;	if (rdonly>0)	dvd_C0[4]|=2;	// "PWP" on	else		dvd_C0[4]&=~2;	// "PWP" off	cmd[0]=0xBF;	// SEND DVD STRUCTURE	cmd[7]=0xC0;	cmd[9]=sizeof(dvd_C0);	cmd[11]=0;	if ((err=cmd.transport(WRITE,dvd_C0,sizeof(dvd_C0))))	{   sperror("SEND DVD STRUCTURE#C0",err); return 1;   }	// Verify...	cmd[0]=0xAD;	// READ DVD STRUCTURE	cmd[7]=0xC0;	cmd[9]=sizeof(dvd_C0);	cmd[11]=0;	if ((err=cmd.transport(READ,dvd_C0,sizeof(dvd_C0))))	{   sperror("READ DVD STRUCTURE#C0",err); return 1;   }	printf ("Persistent Write Protection is %s\n",		dvd_C0[4]&0x02 ? "on" : "off");    } while (0);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -