02-27-2002
When you open() a file you create an entry in the system file table and you get an fd that points to that file table entry. The file table entry has an integer called the file pointer that indicates the next byte to be read or wriitten in the file. As you read the file, the file pointer gets updated.
When you duplicate an fd by any means such as dup(), fcntrl(), or even fork(), you get new fd's that point to the same file table entry.
If you want two file pointers to the same file, you must have two file table entries in which to store them. That means two open() calls.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
What is a fork? Why would one create a fork? What are the advantages and disadvantages of using a fork?
Please advise.
Thank You.
Deepali (5 Replies)
Discussion started by: Deepali
5 Replies
2. Programming
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#define MAX_COUNT 200
#define BUF_SIZE 100
void main(void)
{
pid_t pid;
int i;
char buf;
fork();
pid = getpid();
for (i = 1; i <= MAX_COUNT; i++) {
sprintf(buf,... (2 Replies)
Discussion started by: MKSRaja
2 Replies
3. Programming
Hello all.
I'm developing a filetransfer application, which is supposed to work sort of like dcc, with multiple transfers etc. Now i wonder what the best way to manage the transfers is. Should i fork() for each new transfer, hogging loads of memory or use pthreads? Maybe I can use select to see... (0 Replies)
Discussion started by: crippe
0 Replies
4. Programming
hi all
About this code
for (i = 1; i < n; i++)
if ((childpid = fork()) <= 0)
break;
I really can't understand the output .
and the way fork () return the value .
how about the process Id ,the child process Id and the parent ID
in this case
so please answer me soon (5 Replies)
Discussion started by: iwbasts
5 Replies
5. Programming
Hi everybody,
I wanna write a code to understand how fork works.
my target
--------------
-Parent creates a file(called temp) and writes into this file "1".Then it closes the file.
-Then parent creates a child and wait until execution of this child ends.
-Then child opens the same... (3 Replies)
Discussion started by: alexicopax
3 Replies
6. UNIX for Advanced & Expert Users
Hi,
I wrote a simple program for understanding the fork command. The code is as below
int main(void)
{
fork(); printf("hi 1 \n");
fork(); printf("hi 2 \n");
fork(); printf("hi 3 \n");
}
I am getting a variation in the number of times the printf is called if i remove the \n from each of... (1 Reply)
Discussion started by: xyz123456
1 Replies
7. Programming
Hi,
I wrote a simple program for understanding the fork command. The code is as below
int main(void)
{
fork(); printf("hi 1 \n");
fork(); printf("hi 2 \n");
fork(); printf("hi 3 \n");
}
I am getting a variation in the number of times the printf is called if i remove the \n from each... (2 Replies)
Discussion started by: xyz123456
2 Replies
8. Programming
does fork() spawn only the parent process, what if fork() is looped, does it spawn the parent and the child? (4 Replies)
Discussion started by: Peevish
4 Replies
9. UNIX for Dummies Questions & Answers
I'm trying to run a simple test on how to use fork(), i'm able to execute the child process first then the parent, but how can I execute parent then child..?
Thanks! (1 Reply)
Discussion started by: l flipboi l
1 Replies
10. Programming
I understand that fork create a child but I need very simple example that make child useful....
I mean how will make the program faster anyone explain with code plz
using C plz (2 Replies)
Discussion started by: fwrlfo
2 Replies
dup(2) System Calls Manual dup(2)
Name
dup, dup2 - duplicate an open file descriptor
Syntax
newd = dup(oldd)
int newd, oldd;
dup2(oldd, newd)
int oldd, newd;
Description
The system call duplicates an existing object descriptor. The argument oldd is a small non-negative integer index in the per-process
descriptor table. The value must be less than the size of the table, which is returned by The new descriptor, newd, returned by the call
is the lowest numbered descriptor that is not currently in use by the process.
The object referenced by the descriptor does not distinguish between references using oldd and newd in any way. Thus, if newd and oldd are
duplicate references to an open file, and calls all move a single pointer into the file. If a separate pointer into the file is desired, a
different object reference to the file must be obtained by issuing an additional call.
In the second form of the call, specify the value of newd needed. If this descriptor is already in use, the descriptor is first deallocated
as if a call had been done.
Return Values
The value -1 is returned if an error occurs in either call. The external variable errno indicates the cause of the error.
Diagnostics
The and system calls fail under the following conditions:
[EBADF] The oldd or newd is not a valid active descriptor.
[EMFILE] Too many descriptors are active.
[EINTR] The or function was terminated prematurely by a signal.
See Also
accept(2), close(2), getdtablesize(2), lseek(2), open(2), pipe(2), read(2), socket(2), socketpair(2), write(2)
dup(2)