做宣传语的网站,linux 网站建设模板,中国城投建设集团网站,建立网站方法dup
#includeunistd.h
int dup(int oldfd);作用#xff1a;复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回#xff1a;成功返回新的文件描述符#xff0c;失败…dup
#includeunistd.h
int dup(int oldfd);作用复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回成功返回新的文件描述符失败返回-1dup2
#includeunistd.h
int dup2(int oldfd, int newfd);作用 重定向文件描述符oldfd指向1.txtnewfd原本指向2.txt调用成功后newfd和b.txt自动做close,同时newfd指向了a.txt如果old和new的值相同是同一个文件描述符相当于上面都没做返回成功返回新的文件描述符失败返回-1fcntl
有五种用法常用的两种
#include unistd.h
#include fcntl.hint fcntl(int fd, int cmd, ... /* arg */ );参数fd需要被操作的文件描述符cmd:表示对文件描述符如何操作的命令1.-F_DUPFD : 复制文件描述符复制fd得到并返回一个新的很像上面的dup2.-F_GETFL : 获取指定的文件描述符的flag就是O_RDONLY这样的-F_SETFL : 设置文件描述符文件状态flag必选项 O_RDONLY,O_WRONLY,O_RDWR 不可以被修改可选项 O_APPEND表示追加数据, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK设置成阻塞
阻塞和非阻塞描述的是函数调用的行为
eg:第二种改写文件描述符状态的操作示例
//假设一开始打开的时候传入的文件描述符状态是只写状态
int fd open(1.txt,O_WRONLY);
if(fd -1){perror(open);return -1
}
//获取当前文件描述符的状态flag
int flag fcntl(fd, F_GETFL);
flag O_APPEND;
//修改文件描述符状态的flag,给falg变成上面修改的新的flag
int ret fcntl(fd,F_SETFL, flag);
char* str nihao;
write(fd,str,strlen(str));
close(fd);
//这样nihao就可以添加在后面了这就达到了修改的目的如果一开始传入的是O_RDONLY,然后后面再加上O_APPEND的话还是不行的因为只有只读和在尾部追加的权力并没有写的权力这个东西规定的死板的。