`

dup2-close-fd

    博客分类:
  • APUE
阅读更多
int main(int argc, char *argv[])
{
    char say1[] = "hello write\n\0";
    char say2[] = "hello printf\n\0";

    close(STDOUT_FILENO);
    write(0, say1, strlen(say1));
    printf("%s", say2);
    return 0;
}



int dup2(int oldfd, int newfd);
1)关闭newfd;
2)复制oldfd到newfd,即newfd 指向 oldfd
3)newfd使用原来的描述符。

int main(int argc, char *argv[])
{
    int fd = open("/home/long/fd/file.txt",O_WRONLY);
    printf("fd = %d \t OUT = %d\n", fd, STDOUT_FILENO);

    int stat = dup2(fd, STDOUT_FILENO);
    char str[128] = {0};
    sprintf(str,"dup2 = %d \n",stat);

    write(2, str, strlen(str));
    close(fd);
    execl("/usr/bin/uptime", "uptime", 0);
    return 0;
}



这里涉及程序的资源表、资源共享

分享到:
评论

相关推荐

    dup_dup2介绍

    `dup`创建了与`fd1`相同的新描述符`fd2`,然后`dup2`将`fd1`的值复制到`fd2`,并关闭`fd1`。因此,后续对`fd2`的写操作将追加到文件末尾,因为两个描述符都指向同一位置。 通过了解和使用`dup`和`dup2`,开发者可以...

    文件描述符的复制:dup()和dup2()示例代码

    dup2(fd1, fd2); // 将fd1复制到fd2,关闭原来的fd2内容 write(fd1, "dup2 example", strlen("dup2 example")); // 写入数据 char buffer[100]; lseek(fd2, 0, SEEK_SET); read(fd2, buffer, sizeof(buffer)...

    APUE-Edition2-英文版

    #### 3.12 dup and dup2 Functions(dup和dup2函数) 这部分讲解了如何使用dup和dup2函数复制文件描述符。 #### 3.13 sync, fsync, and fdatasync Functions(sync、fsync和fdatasync函数) 这里介绍了如何使用这些...

    UNIX环境高级编程_第2版.part2

    3.12 dup和dup2函数60 3.13 sync、fsync和fdatasync函数61 3.14 fcntl函数62 3.15 ioctl函数66 3.16 /dev/fd 67 3.17 小结68 习题68 第4章文件和目录71 4.1 引言71 4.2 stat、fstat和lstat函数71 目录 ...

    09文件操作篇.pdf

    例如,`close()` 用于关闭文件并释放资源,`creat()` 用于创建新文件,而 `dup()` 和 `dup2()` 则用于复制文件描述符,`fcntl()` 提供了更为灵活的文件描述符操作能力。掌握这些函数不仅能帮助开发者更好地控制文件...

    Linux应用编程和网络编程入门思维导图

    - **基本语法**: `int close(int fd);` - **描述**: 关闭由`fd`标识的文件描述符。 - **返回值**: 成功返回0,失败返回-1。 - **Read 函数** - **基本语法**: `ssize_t read(int fd, void *buf, size_t count);...

    Linux下Shell的实现说明

    close(fd[0]); close(STD_OUT); dup(fd[1]); close(fd[1]); redirect(order); } else { close(fd[1]); close(STD_IN); dup(fd[0]); close(fd[0]); waitpid(pid, &status, 0); pipel(other); } } ``` ...

    linux网络编程相关

    - **dup/dup2**:`dup()`函数用于复制一个文件描述符,而`dup2()`则允许用户指定新的文件描述符。 - **dup()**:`int dup(int oldfd);` 复制旧的文件描述符。 - **dup2()**:`int dup2(int oldfd, int newfd);` 将...

    UNIX环境高级编程_第2版.part1

    3.12 dup和dup2函数60 3.13 sync、fsync和fdatasync函数61 3.14 fcntl函数62 3.15 ioctl函数66 3.16 /dev/fd 67 3.17 小结68 习题68 第4章文件和目录71 4.1 引言71 4.2 stat、fstat和lstat函数71 目录 ...

    linux进程间的通信:匿名管道

    dup2(fd[0], 0); // 重定向标准输入 execlp("cat", "cat", "-u", "input.txt", NULL); } pid_t pid2 = fork(); // 创建第二个子进程 if (pid2 == 0) { // 子进程2 close(fd[0]); // 关闭读端 dup2(fd[1], 1); /...

    进程和线程编程

    dup2(fd[1], STDOUT_FILENO); /* 替换标准输出 */ /* 父进程中也需要做类似的替换 */ ``` **3. popen() 和 pclose()** - **popen()**:创建一个管道并启动一个子进程。 - **pclose()**:关闭管道并等待子进程结束...

    linux test

    本文将详细介绍`close()`、`creat()`、`dup()`、`dup2()`以及`fcntl()`这五个与文件描述符相关的函数,它们是Linux I/O操作的核心组件。 首先,`close()`函数用于关闭一个已经打开的文件。当你完成对文件的操作后,...

    从Linux程序中执行shell(程序、脚本)并获得输出结果

    if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO) return -1; close(fd[1]); } execl("/bin/sh", "sh", "-c", cmdstring, (char*)0); } return 0; } ``` 这里,`pipe`创建了管道,`fork`创建子进程,`dup...

    linux 进程管道通信 实例

    dup2(fd[1], 1); // 将fd[1](写端)重定向为标准输出 close(fd[0]); // 关闭不需要的读端 ``` **数据传输**: 现在,父子进程可以通过管道进行通信。子进程写入数据,父进程读取数据。例如,子进程可能使用`write...

    UNIX环境高级编程-第二版

    - `dup()`和`dup2()`函数用于复制文件描述符。 **3.13 sync、fsync和fdatasync函数** - 这些函数用于同步文件系统缓存到磁盘。 **3.14 fcntl函数** - `fcntl()`函数提供了对文件描述符的高级控制。 **3.15 ioctl...

Global site tag (gtag.js) - Google Analytics