Sponsored Content
Full Discussion: Lseek implementation
Top Forums UNIX for Dummies Questions & Answers Lseek implementation Post 302554957 by Corona688 on Tuesday 13th of September 2011 01:16:15 PM
Old 09-13-2011
Quote:
Originally Posted by Humudituu
I'm trying to wrap my mind around this... The mutex should be released after the lseek, right? Is the mutex active while writing? Otherwise the behaviour explanied below wouldn't make sense to me, as either lseek while reading would be slow as well or the mutex should be released rather quickly... :S
I suspect reads are happening faster than writes because a disk has its own internal cache, too.

That mutex must control more than just the a offset...

On thinking about this a little more, I think this happens because POSIX requires the ordering of some block operations to be preserved. It's pretty much just common-sense rules, like if one program reads a block after another writes to it, the reading program should get the new contents and not the old.

Forcing things to go in order is easy when you have cache. Just keep the cache consistent and everything's golden. Things don't have to wait for each other. Reads still happen randomly as needed, while disk writes happen in orderly groups, at times of the kernel's own choosing. ext2/3/4 are designed for this mode of operation.

When you switch to direct I/O, writes must happen in lock-step for consistency to be preserved. The order of reads doesn't matter as much.

I suspect you'd get better performance by writing to a raw disk device instead of a file on disk. That's the context I usually see O_DIRECT employed in.

Last edited by Corona688; 09-13-2011 at 02:27 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

lseek in c

sir, i used lssek as this lseek(fp,-10,2); i am not getting any output i dont now why can you explan sir.. Thanks in advance, Arunkumar (4 Replies)
Discussion started by: arunkumar_mca
4 Replies

2. Shell Programming and Scripting

Need help on AWK implementation

Hi, I am accepting a string from user. compare this output with the awk output as below... echo "\n\n\tDay : \c" read day awk '{ if($day == $2) { if ($mon == $1) { print "Yes" }}}' syslog.txt I am getting the follwoing error awk: Field $() is not correct. The input line... (5 Replies)
Discussion started by: EmbedUX
5 Replies

3. Programming

Hairy Problem! lseek over 4G

recently my project needs me to lseek a position over 4G size.... i found in linux or unix the parameters are all ulong 32 bits...the limit dooms the movement of a position over 4G I was told that i should lseek64 to meet my need... but i have no idea where i can get the function neither by "man... (8 Replies)
Discussion started by: macroideal
8 Replies

4. Programming

Malloc implementation in C

Hey Guys I am trying to implement the malloc function for my OS class and I am having a little trouble with it. I would be really grateful if I could get some hints on this problem. So I am using a doubly-linked list as my data structure and I have to allocate memory for it (duh...). The... (1 Reply)
Discussion started by: Gambit_b
1 Replies

5. UNIX for Advanced & Expert Users

Malloc Implementation in C

Hey Guys Some of my friends have got together and we are trying to write a basic kernel similar to Linux. I am trying to implement the malloc function in C and I am using a doubly linked list as the primary data structure. I need to allocate memory for this link list (duh...) and I don't feel... (2 Replies)
Discussion started by: rbansal2
2 Replies

6. UNIX for Dummies Questions & Answers

lseek() equivalent

I know there is lseek() function that will allow to write or read from certain position in the file. Is there similar function that will let do same but for array rather then file? (9 Replies)
Discussion started by: joker40
9 Replies

7. UNIX for Dummies Questions & Answers

Understanding lseek

I tried to use lseek system call to determine the number of bytes in a file. To do so, I used open system call with O_APPEND flag to open a file. As lseek returns the current offset so I called lseek for opened file with offset as zero and whence as SEEK_CUR. So I guess it must return the number of... (3 Replies)
Discussion started by: Deepak Raj
3 Replies

8. Programming

what is the main difference between difference between using nonatomic lseek and O_APPEND

I think both write at the end of the file ...... but is there a sharp difference between those 2 instruction ..... thank you this is my 3rd question today forgive me :D (1 Reply)
Discussion started by: fwrlfo
1 Replies

9. AIX

Backup: The lseek call failed

Hi, We are facing issues while backing up our 1205 GB filesystem on LTO5 Tape. During backup the "backup: The lseek call failed." messages were generated, I want to know why these messages were generating AIX version is: 6100-08-00-0000 backup: The date of this level 0 backup is Mon Mar 11... (4 Replies)
Discussion started by: m_raheelahmed
4 Replies

10. Programming

Problem with lseek call.

The following code: int fd; if (fd = open("mem", O_RDONLY) == -1) return 1; if (lseek(fd, 0, SEEK_SET) == -1) { char *buf = malloc(512); buf = strerror(errno); printf("%s\n", buf); return 1; } always returns with "illegal seek"... (2 Replies)
Discussion started by: Sir_Tomasz
2 Replies
pthread_mutex_getprioceiling(3T)										  pthread_mutex_getprioceiling(3T)

NAME
pthread_mutex_getprioceiling(), pthread_mutex_setprioceiling() - get or set the prioceiling of a mutex. SYNOPSIS
PARAMETERS
mutex Pointer to the mutex whose prioceiling attribute is to be set/retrieved. prioceiling This parameter either points to the memory location where the prioceiling attribute of mutex is to be returned (get func- tion) or specifies the new value of the prioceiling attribute for mutex (set function). old_ceiling This parameter points to the memory location where the old prioceiling attribute of mutex is to be returned (set function only). DESCRIPTION
The function will first lock mutex. If the mutex is currently locked, the calling thread will block until the mutex can be locked. Once the mutex has been locked, the prioceiling attribute of mutex will be changed to the value specified in the prioceiling parameter and mutex will be unlocked. The old priority ceiling for the mutex will be returned in old_prioceiling. The function returns the current value of the prioceiling attribute for mutex in the prioceiling parameter. Be sure to check for the definition of before using these functions. Not all systems will support these functions. RETURN VALUE
Upon successful completion, and return zero. Otherwise, an error number is returned to indicate the error (the variable is not set). ERRORS
If any of the following occur, the and functions return the corresponding error number: is not defined and these functions are not supported. For each of the following conditions, if the condition is detected, the and functions return the corresponding error number: The priority value prioceiling is not a legal value. mutex is not a valid mutex. The prioceiling protocol is not supported for mutexes. The caller does not have the appropriate privileges to change priority ceiling for mutex. mutex parameter points to an illegal address. AUTHOR
and were derived from the IEEE POSIX P1003.1c standard. SEE ALSO
pthread_create(3T), pthread_mutex_init(3T), pthread_mutexattr_setprioceiling(3T), pthread_mutexattr_getprioceiling(3T), pthread_mutex_lock(3T), pthread_mutex_trylock(3T), pthread_mutex_unlock(3T). STANDARDS CONFORMANCE
Pthread Library pthread_mutex_getprioceiling(3T)
All times are GMT -4. The time now is 10:48 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy