Hi all, Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it? read(fd, buf, 4096) ; would this mean i would read the first block and all its contents? Thanks
On Mon, 13 May 2013 13:35:54 +0530, shampavman said:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it?
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents?
This isn't a kernel question, it's a C 101 question. But yes, if you only want to read the first 4K, you just read the first 4K.
El 13/05/2013 10:07, "shampavman" <shampavman.cg@gmail.com> va escriure:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it?
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents?
You actually might even read more, depending on your file system. The dentrys and inodes are stored in blocks on the disk as well. You can try to access your disk through /dev/sdX directly, but beware that when writing you will most probably destroy your data on that disk. Regards, Matthias
Thanks
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Hi, On Mon, May 13, 2013 at 9:52 PM, Matthias Brugger <matthias.bgg@gmail.com> wrote:
El 13/05/2013 10:07, "shampavman" <shampavman.cg@gmail.com> va escriure:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it?
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents?
One way to do this is use the FIBMAP ioctl to the get the block numbers of a file and then seek the disk /dev/sdX directly and use the read() to get data block. Regards.
On 05/14/2013 11:59 AM, Prashant Shah wrote:
Hi,
On Mon, May 13, 2013 at 9:52 PM, Matthias Brugger <matthias.bgg@gmail.com> wrote:
El 13/05/2013 10:07, "shampavman" <shampavman.cg@gmail.com> va escriure:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it?
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents? One way to do this is use the FIBMAP ioctl to the get the block numbers of a file and then seek the disk /dev/sdX directly and use the read() to get data block. But why does a simple read not turn out 1 block for me? Eg, i know my block size if 4k and my file (according to du) reports that it's using 8k of space. So when i read the file via the read() and ask it to give me the 'first 4k' bytes, would that not return 1 block ?
thanks
Regards.
On Mon, May 13, 2013 at 1:05 AM, shampavman <shampavman.cg@gmail.com> wrote:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each).
I must be missing something obvious. Why does a file of 10K only needs 2 blocks of 4K ? You haven't mentioned that it has any holes in it.
Now if i want to read only 1 block from it how can i do it?
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents?
Thanks
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Thanks - Manish
On Mon, May 13, 2013 at 1:35 PM, shampavman <shampavman.cg@gmail.com> wrote:
Hi all,
Supposing i create a file of size 10K, it will occupy 2 blocks (4K each). Now if i want to read only 1 block from it how can i do it?
It will require 3 blocks.
read(fd, buf, 4096) ; would this mean i would read the first block and all its contents?
It may be read even further (readahead) If you are in kernel mode, and if you want to implement your own filesystem and want to read a single block, you can use the sb_bread function. -- Sankar P http://psankar.blogspot.com
participants (6)
-
Manish Katiyar -
Matthias Brugger -
Prashant Shah -
Sankar P -
shampavman -
Valdis.Kletnieks@vt.edu