VC、Linux、vxWorks读写物理扇区小结

直接上程序:

1. Windows下的VC:

HANDLE hDevice = CreateFile("\\\\.\\I:", GENERIC_READ|GENERIC_WRITE,    
			FILE_SHARE_READ | FILE_SHARE_WRITE,   
			NULL, OPEN_EXISTING, 0, NULL  
			);   
		if (hDevice == INVALID_HANDLE_VALUE)   
		{  
			printf("打开磁盘错误\n");
			return 0;  
		}  

		//读扇区
		DWORD bytesread = 0; 
		unsigned char Buffer[1000] = {0};
		int SectorNumber=0;
		//for (int SectorNumber=0; SectorNumber<100; SectorNumber++)
		{
			SetFilePointer (hDevice, SectorNumber*512, 0, FILE_BEGIN);  
			ReadFile (hDevice, Buffer, 512, &bytesread, NULL);  

			getch();

		}

		//写操作
		memset(Buffer, 0x35, 512);
		SetFilePointer (hDevice, SectorNumber*512, 0, FILE_BEGIN);  
		WriteFile (hDevice, Buffer, 512, &bytesread, NULL);

上面的CreateFile函数的第一个参数,是C: ,D:类似的盘符


2. vxWorks读扇区:参考mkboot.c源程序得到

char lbaSectorZero[1024] = {0};
	int line, j;
	ATA_RAW	ataRaw = {0};
	
    ataRaw.cylinder   = 0;
    ataRaw.head	      = 0;
    ataRaw.sector     = 1;
    ataRaw.pBuf	      = (char *)lbaSectorZero;
    ataRaw.nSecs      = 1; 
    ataRaw.direction  = O_RDONLY;
    ataRawio (0, 0, &ataRaw);
    
	for(line=0; line<32; line++)
	{
		for(j=0; j<16; j++)
		{
			printf("%02x ", (unsigned char)lbaSectorZero[line*16+j]);
		}
		printf("\n");
	}


ataRawio.direction为0时是读,为1时是写,其他参考 target/h/drv/hdisk/ataDrv.h的ATA_RAW定义。



3. Linux:下面的/dev/sde,是U盘插上去后显示的设备符合:

  #include <stdio.h>
#include <stdlib.h>
#include <stdio.h> 
#include <errno.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

#include <linux/fs.h> 
#include <sys/ioctl.h>


/*
 * 
 */
int main(int argc, char** argv) 
{
	int fd=0;
	int sizes = 0;
	char buf[1000] = {0};
        int line, j;

	fd = open("/dev/sde", O_RDONLY);
	if(fd !=-1)
	{	
		
		ioctl(fd, BLKSSZGET, &sizes);
		printf("sector size=%d\n", sizes);

		lseek(fd, 0, SEEK_SET);
		
		read(fd, buf, sizes);
                
                for(line=0; line<32; line++)
                {
                    for(j=0; j<16; j++)
                    {
                        printf("%02x ", (unsigned char)buf[line*16+j]);
                    }
                    printf("\n");
                }

	}

    return (EXIT_SUCCESS);
}












你可能感兴趣的:(VC、Linux、vxWorks读写物理扇区小结)