Sponsored Content
Full Discussion: Which is more expensive ?
Top Forums Programming Which is more expensive ? Post 302131754 by porter on Monday 13th of August 2007 02:21:18 PM
Old 08-13-2007
Quote:
Originally Posted by vino
I was told that you generally need to close only 64 fds instead of the RLIMIT.rlim_cur after forking. Any thoughts ?
You need to close the file descriptors you need to close. Smilie

The number 64 comes from some editions of UNIX's hard coded limit.

There are alternatives...

1. If the reason is the program is going to call 'exec' then the code that opens the file descriptors could set the close-on-exec bit.

2. Modular threaded code could use pthead_atfork to set up a call back to close a file descriptor if required.
 

2 More Discussions You Might Find Interesting

1. Programming

calling pthread_self (on ubuntu), expensive?

Hi all, Is anyone aware of what operations are involved when a call to pthread_self() is made, obtaining the unique thread ID on a Ubuntu system (or even any Linux flavour)? Specifically, to retrieve the thread id, is there any locking required or atomic operations? I'm building an... (11 Replies)
Discussion started by: gorga
11 Replies

2. What is on Your Mind?

Very Expensive Running Shoes

You really should not need one third of the entire US budget to buy a pair of running shoes... even if they are name brand. What have these guys been smoking? It reminds me of the old joke... Customer: At those prices you aren't going to sell many shoes. Salesman: Ah, but all we need to do is... (4 Replies)
Discussion started by: Perderabo
4 Replies
close(2)							System Calls Manual							  close(2)

Name
       close - delete a descriptor

Syntax
       close(fd)
       int fd;

Description
       The  call  deletes  a  descriptor  from	the per-process object reference table.  If the descriptor is the last reference to the underlying
       object, then the object is deactivated.	For example, on the last close of a file, the current pointer associated with the  file  is  lost.
       On  the	last  close  of a socket, discards associated naming information and queued data.  On the last close of a file holding an advisory
       lock, the lock is released.  For further information, see

       A process's descriptors are automatically closed when a process exits, but because each	process  can  have  a  limited	number	of  active
       descriptors, is necessary for programs that deal with many descriptors.

       When  a	process  forks,  all descriptors for the new child process reference the same objects as they did in the parent process before the
       fork.  For further information, see If a new process is then to be run using the process would normally inherit these descriptors.  Most of
       the  descriptors  can  be  rearranged  with the system call or deleted with before is called. However, if any descriptors are needed if the
       fails, they must be closed if the execve succeeds.  For this reason, the call, fcntl(d, F_SETFD, 1), is provided. This call arranges that a
       descriptor is closed after a successful call.  The call, fcntl(d, F_SETFD, 0), restores the default, which is to not close the descriptor.

       When  is  used  on  a  descriptor  that	refers to a remote file over NFS, and that file has been modified by using then any cached data is
       flushed before returns. If an asynchronous write error has occurred previously with this remote file, or occurred  as  part  of	the  flush
       operation described above, then returns -1 and errno will be set to the error code. The return code from should be inspected by any program
       that can over NFS.

Return Values
       Upon successful completion, a value of 0 is returned.  Otherwise, a value of -1 is returned, and the global integer variable, errno, is set
       to indicate the error.

Diagnostics
       The system call fails under the following conditions:

       [EBADF]	      D is not an active descriptor.

       [EINTR]	      The function was interrupted by a signal.

       If  an  error occurs on an asynchronous write over NFS, the error cannot always be returned from a system call.	The error code is returned
       on or The following are NFS-only error messages:

       [EACCESS]      The requested address is protected, and the current user has inadequate permission to access it.

       [ENOSPC]       There is no free space remaining on the file system containing the file.

       [EDQUOT]       The user's quota of disk blocks on the file system containing the file has been exhausted.

       [EIO]	      An I/O error occurred while reading from or writing to the file system.

       [EROFS]	      The file is on a read-only file system.

       [ESTALE]       The fd argument is invalid because the file referred to by that file handle no longer exists or has been revoked.

       [ETIMEDOUT]    A write operation failed because the server did not properly respond after a  period  of	time  that  is	dependent  on  the
		      options.

See Also
       accept(2), execve(2), fcntl(2), flock(2), fsync(2), open(2), pipe(2), socket(2), socketpair(2), write(2)

																	  close(2)
All times are GMT -4. The time now is 02:29 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy