From: Douglas Gilbert <dougg@torque.net>
To: linux-kernel@vger.kernel.org
Subject: Re: rawio usage
Date: Tue, 06 Feb 2001 14:09:54 -0500 [thread overview]
Message-ID: <3A804C02.B09071@torque.net> (raw)
Content-Type: multipart/mixed;
boundary="------------D4869FCB9AEAF2CC69FB9DEF"
This is a multi-part message in MIME format.
--------------D4869FCB9AEAF2CC69FB9DEF
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
"Mayank Vasa" <mvasa@confluencenetworks.com> wrote:
> I am quite new to rawio and am experimenting with with its usage. My test
> environment is Redhat 7.0, kernel version 2.2.16-22 having an external fibre
> channel drive having 2 disks (/dev/sda1 and /dev/sdb1)
>
> All I am trying to do is to write and read to & from the disk using a raw
> device. Externally I did a "raw /dev/raw/raw1 /dev/sdb1" and then I wrote a
> small program to do the read/write.
[snip]
Raw devices need to meet the alignment requirements of the
device they are bound to; in the case of most disk this
will be 512 bytes. You need to take this into account for:
- the buffer you give to the read() and write() calls
- the 'size' given to read() and write() should be a
multiple of 512
- the SEEK_SET 'offset' given to lseek() should be a
multiple of 512. Note you have a 2 G limit here.
You can use _llseek() to get around this.
A small program that just reads from a raw device (or the
corresponding block device which should give the same
result) attached.
If you were binding a raw device to a cdrom device then
the BLKSIZE would need to be 2048 bytes (in most cases).
Doug Gilbert
--------------D4869FCB9AEAF2CC69FB9DEF
Content-Type: text/plain; charset=us-ascii;
name="my_rawio_ex.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="my_rawio_ex.c"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#define BLKSIZE 512
#define BLKS2READ 1
int main(int argc, char *argv[])
{
int fd, k;
unsigned char buff[BLKSIZE * (BLKS2READ + 1)]; // allow extra for alignment
unsigned char * arbp; // aligned read buffer ptr
long block_addr = 0;
arbp = (char *)(((unsigned long)buff + (BLKSIZE - 1)) & (~(BLKSIZE - 1)));
fd = open(argv[1], O_RDONLY);
if (fd < 0) {
perror("open");
exit (1);
}
if ((lseek(fd, block_addr * BLKSIZE, SEEK_SET)) < 0){
perror("lseek"); // problem if 2nd arg > 2G
exit (1);
}
if ((read(fd, arbp, BLKSIZE * BLKS2READ)) < 0) {
perror("read");
exit(1);
}
printf("First 16 bytes of the readbuf (in hex) are:\n ");
for (k = 0; k < 16; ++k)
printf("%x ", (int)arbp[k]);
printf("\n");
close(fd);
return 0;
}
--------------D4869FCB9AEAF2CC69FB9DEF--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next reply other threads:[~2001-02-06 19:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-06 19:09 Douglas Gilbert [this message]
-- strict thread matches above, loose matches on Subject: below --
2001-02-06 14:48 rawio usage Nathan Black
2001-02-06 6:36 Mayank Vasa
2001-02-06 14:17 ` Stephen C. Tweedie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3A804C02.B09071@torque.net \
--to=dougg@torque.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.