Hello

Gorazd Golob wrote:
> 
> It doesn't work right - your example :(
> 
> Our programmers said that ssize_t type should be used instead of size_t
> for rd variable..
> 

ok, yes, I agree. But it should not change anything.
Please try new version. It works fine here. How does it behave on your side?

> in code is:
> 
> size_t rd;
> 
> 
> tnx, gorazd
> 
> 
> On Mon, 10 Oct 2005, Vladimir V. Saveliev wrote:
> 
>> Hello
>>
>> Gorazd Golob wrote:
>>>
>>>
>>> On Mon, 10 Oct 2005, Vladimir V. Saveliev wrote:
>>>
>>>>
>>>> Does it work on ext2?
>>> Yes it work on ext2, ext3, xfs ..
>>>
>>>> Are you sure that file offset is properly aligned?
>>> Yes ..
>>>
>> Would you please try whether the attached program works for you?
>>
>>>
>>>>
>>>>> Without O_DIRECT works fine as said in previous mails. Write with
>>>>> O_DIRECT works fine. Kernel version is:
>>>>> Linux xxxx 2.6.12.6 #6 SMP Thu Sep 15 12:29:53 CEST 2005 x86_64
>>>>> Intel(R)
>>>>> Xeon(TM) CPU 3.00GHz GenuineIntel GNU/Linux
>>>>>
>>>>> please let me know if you need more info.
>>>>>
>>>>> tnx, Gorazd
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>> Or in other words is reiserfs3 supporting reading with O_DIRECT
>>>>>>> flag?
>>>>>>> Writing works well with 0_DIRECT on reiserfs3.
>>>>>>>
>>>>>>> Gorazd
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
> 
> 

#define _XOPEN_SOURCE 600
#include <stdio.h>
#include <unistd.h>
#include <malloc.h>
#include <stdlib.h>
#include <fcntl.h>

#define O_DIRECT   040000

int main(int argc, char **argv)
{
	int fd;
	ssize_t rd;
	char *buf;

	if (argc != 2) {
		printf("%s filename\n", argv[0]);
		return 0;
	}
	fd = open(argv[1], O_RDONLY | O_DIRECT);
	if (fd == -1) {
		perror("open failed");
		return 0;
	}
	if (posix_memalign((void **)&buf, 4096, 4096)) {
		perror("malloc failed");
                return 0;
	}
	rd = read(fd, buf, 4096);
	if (rd != 4096) {
                perror("read failed");
                return 0;
	}
	printf("read ok\n");
	free(buf);
	close(fd);
	return 0;
}

Reply via email to