Sponsored Content
Top Forums Programming C program in Unix / Linux - Time differences Post 82902 by jim mcnamara on Wednesday 7th of September 2005 02:10:27 PM
Old 09-07-2005
The default value for BUFFSIZE is usually 4096, which is what the stdio C functions like fgets or fread read from. You should never set the value to a small number except for very special cases. If you have a copy of 'Advanced Programming in the UNIX Environment' look on pages 68-70 for I/O efficiency. BUFFSIZE of 4096 is really optimum.

Anytime the seek goes beyond the buffer boundary, you have to go back into kernel mode to get another buffer. Which means you get to wait. And because you're on a multi-user system, it's possible the hard drive cache has been flushed by somebody else. So you get to wait for I/O.

If you are really moving the file pointer ahead or back by 1-2 bytes, you REALLY should have read the whole file into memory. seek is not meant to do that thousands of times. It's like using ungetc which can cause the same problem. I would seriously consider a pointer instead. Here is a starter version, it compiles.

Code:
/****************************
*
*char *buffer is the whole file, read into memory 
*buflen is the size of the buffer 
*char *fileptr is the current "file pointer"  
*
*****************************/
#include <errno.h>
#include <stdio.h>
extern char *buffer;
extern size_t buflen;

int myseek(char **fileptr, long int offset, int whence)
{
    int retval=0;
	switch(whence)
	{
		case SEEK_CUR:
		    *fileptr+=offset;
			break;
		case SEEK_END:
		    *fileptr=buffer;
		    *fileptr+=buflen;
		    *fileptr+=offset;
			break;
		case SEEK_SET:
		    *fileptr=buffer;
		    *fileptr+=offset;
			break;
		default:
		    errno=EINVAL;
		    retval=(-1);
		    break;
	}
	if (*fileptr > (buffer+buflen) || *fileptr < buffer )
	{
		retval=(-1);
		errno=EINVAL;
	}
    return retval;
}

 

8 More Discussions You Might Find Interesting

1. Programming

Program in linux for all unix os

Hello there, I have the following mission for my internship: - Take an existing program which uses OpenGL writen in Delphi, for Windows. - Write this program in C++ for all operating systems from which the name end on a "X" So, what kind of features does this program need. - There... (1 Reply)
Discussion started by: lmnt22
1 Replies

2. Shell Programming and Scripting

Working out time differences

Hi everyone, I need to be able to write into a ksh script, a function that can look at 2 24 hour time variables and work out the difference between them. e.g job1 runs at 21:00 job2 runs at 01:00 diff = 04:00 hours I would also need negative numbers i.e where job1 runs after job2 ... (1 Reply)
Discussion started by: rik1551
1 Replies

3. Shell Programming and Scripting

Date/time differences

A thanks to all ahead of time. I've checked previous posts about this subject and can't find any that quite fit what I need. If I've missed the post could you point me there. When I do an ls -al I get the following output: -rw-r--r-- 1 staff staff 855 July 24 20:05 ... (4 Replies)
Discussion started by: gillr
4 Replies

4. Solaris

difficult time differences

:rolleyes: Hi, How to take the time diffence between start and finish time from a log file? It is like ..... started at Jun 20 23:20 . . ..... finished at Jun 21 01:40 Tryed so many ways but failed to ger exact way. :confused: Your help will be honoured. Ta........Lokesha (1 Reply)
Discussion started by: Lokesha
1 Replies

5. UNIX for Dummies Questions & Answers

Socket Handling Differences Between Linux & Unix?

Sorry if this is a stupid question! I have been developing a Java application that I am deploying on both Unix and Linux servers, which uses lots of socket handling. When the server side connection is dropped by the server un-gracefully I have been seeing close_waits and null connections. ... (0 Replies)
Discussion started by: Vinnie
0 Replies

6. Windows & DOS: Issues & Discussions

XP as a program on Unix/Linux system?

I am sure this question has been asked and answered before, also, if it is the wrong catergory, please let me know. I would like to know how, if possible to run Unix/Linux as my operating system, and then load XP as a program? (I am open to other operating systems, but it has to be able to... (3 Replies)
Discussion started by: mountainwolf
3 Replies

7. UNIX for Dummies Questions & Answers

Differences between time command and usr/bin/time

I wondered if someone could point out the differences between the time commmand and usr/bin/time and the accuracy one might have over another. Also, is there a website or two a person could maybe link for me to describe the differences? Thank you for your time. (2 Replies)
Discussion started by: icedrake
2 Replies

8. Shell Programming and Scripting

differences in linux and unix shell

hi all, can any one plz tell me that what is the difference between linux shell scripting and unix shell scripting. is there any difference at all?? if yes that what are the differences and how could it be combatted thanks in advance (1 Reply)
Discussion started by: nasir_khan
1 Replies
GETC_UNLOCKED(3P)					     POSIX Programmer's Manual						 GETC_UNLOCKED(3P)

PROLOG
This manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (consult the correspond- ing Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux. NAME
getc_unlocked, getchar_unlocked, putc_unlocked, putchar_unlocked - stdio with explicit client locking SYNOPSIS
#include <stdio.h> int getc_unlocked(FILE *stream); int getchar_unlocked(void); int putc_unlocked(int c, FILE *stream); int putchar_unlocked(int c); DESCRIPTION
Versions of the functions getc(), getchar(), putc(), and putchar() respectively named getc_unlocked(), getchar_unlocked(), putc_unlocked(), and putchar_unlocked() shall be provided which are functionally equivalent to the original versions, with the exception that they are not required to be implemented in a thread-safe manner. They may only safely be used within a scope protected by flockfile() (or ftrylock- file()) and funlockfile(). These functions may safely be used in a multi-threaded program if and only if they are called while the invok- ing thread owns the ( FILE *) object, as is the case after a successful call to the flockfile() or ftrylockfile() functions. RETURN VALUE
See getc(), getchar(), putc(), and putchar(). ERRORS
See getc(), getchar(), putc(), and putchar(). The following sections are informative. EXAMPLES
None. APPLICATION USAGE
Since they may be implemented as macros, getc_unlocked() and putc_unlocked() may treat incorrectly a stream argument with side effects. In particular, getc_unlocked(*f++) and putc_unlocked(*f++) do not necessarily work as expected. Therefore, use of these functions in such sit- uations should be preceded by the following statement as appropriate: #undef getc_unlocked #undef putc_unlocked RATIONALE
Some I/O functions are typically implemented as macros for performance reasons (for example, putc() and getc()). For safety, they need to be synchronized, but it is often too expensive to synchronize on every character. Nevertheless, it was felt that the safety concerns were more important; consequently, the getc(), getchar(), putc(), and putchar() functions are required to be thread-safe. However, unlocked versions are also provided with names that clearly indicate the unsafe nature of their operation but can be used to exploit their higher performance. These unlocked versions can be safely used only within explicitly locked program regions, using exported locking primitives. In particular, a sequence such as: flockfile(fileptr); putc_unlocked('1', fileptr); putc_unlocked(' ', fileptr); fprintf(fileptr, "Line 2 "); funlockfile(fileptr); is permissible, and results in the text sequence: 1 Line 2 being printed without being interspersed with output from other threads. It would be wrong to have the standard names such as getc(), putc(), and so on, map to the "faster, but unsafe" rather than the "slower, but safe'' versions. In either case, you would still want to inspect all uses of getc(), putc(), and so on, by hand when converting exist- ing code. Choosing the safe bindings as the default, at least, results in correct code and maintains the "atomicity at the function" invariant. To do otherwise would introduce gratuitous synchronization errors into converted code. Other routines that modify the stdio ( FILE *) structures or buffers are also safely synchronized. Note that there is no need for functions of the form getc_locked(), putc_locked(), and so on, since this is the functionality of getc(), putc(), et al. It would be inappropriate to use a feature test macro to switch a macro definition of getc() between getc_locked() and getc_unlocked(), since the ISO C standard requires an actual function to exist, a function whose behavior could not be changed by the fea- ture test macro. Also, providing both the xxx_locked() and xxx_unlocked() forms leads to the confusion of whether the suffix describes the behavior of the function or the circumstances under which it should be used. Three additional routines, flockfile(), ftrylockfile(), and funlockfile() (which may be macros), are provided to allow the user to delin- eate a sequence of I/O statements that are executed synchronously. The ungetc() function is infrequently called relative to the other functions/macros so no unlocked variation is needed. FUTURE DIRECTIONS
None. SEE ALSO
getc(), getchar(), putc(), putchar(), the Base Definitions volume of IEEE Std 1003.1-2001, <stdio.h> COPYRIGHT
Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition, Standard for Information Technol- ogy -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html . IEEE
/The Open Group 2003 GETC_UNLOCKED(3P)
All times are GMT -4. The time now is 10:03 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy