dup, dup2, dup3 - duplicate a file descriptor
these system calls create a copy of the file descriptor oldfd.
dup() uses the lowest-numbered unused descriptor for the new descriptor.
dup2() makes newfd be the copy of oldfd, closing newfd first if necessary, but note the following:
#include<unistd.h> #include<sys/stat.h> #include<fcntl.h> #include<stdio.h> int main(int argc ,char *argv[]) { int fd=open("./1.c",O_RDONLY); printf("original fd is %d\n",fd); int new_fd=dup(fd); printf("new fd is %d\n",new_fd); }
— Macro: int O_ACCMODE
This macro stands for a mask that can be bitwise-ANDed with the file status flag value to produce a value representing the file access mode. The mode will be O_RDONLY
, O_WRONLY
, or O_RDWR
. (On GNU/Hurd systems it could also be zero, and it never includes the O_EXEC
bit.)
unlink - delete a name and possibly the file it refers to
unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse.
#include<fcntl.h> #include<stdio.h> int main(void) { if(open("cc",O_RDWR)<0) printf("open error\n"); if(unlink("cc")<0) printf("unlink error\n"); printf("file unlinked\n"); sleep(15); printf("done\n"); exit(0); }