首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么要使用链接到标准输入的文件描述符,而不是直接使用标准输入?

使用链接到标准输入的文件描述符而不是直接使用标准输入有以下几个原因:

  1. 灵活性:通过使用文件描述符,可以将标准输入重定向到其他文件或者管道。这样可以实现输入的灵活控制,例如从文件中读取输入或者从其他程序的输出中读取输入。
  2. 可编程性:使用文件描述符可以在程序中以编程方式控制输入。可以通过文件描述符进行读取、写入、定位等操作,从而实现更复杂的输入处理逻辑。
  3. 多路复用:文件描述符可以与其他文件描述符一起使用,实现多路复用的功能。通过将标准输入与其他文件描述符一起使用,可以同时处理多个输入源,提高程序的效率和灵活性。
  4. 代码复用:使用文件描述符可以使代码更具有可重用性。通过将标准输入的文件描述符传递给其他函数或模块,可以在不同的上下文中共享输入处理逻辑,避免重复编写相同的代码。

总结起来,使用链接到标准输入的文件描述符而不是直接使用标准输入可以提供更大的灵活性、可编程性、多路复用能力和代码复用性。这样可以更好地控制输入,并使程序更加灵活和可扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

06-1重定向

1.标准输出重定向 I/O 重定向功能可以重新定义标准输出内容发送的目的地。 使用重定向操作符“ > ”,后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上。...ls -l /bin/usr > ls-output.txt 我们会收到一条错误信息,因为我们指定的是一个不存在的目录,所以这个错误信息是正确的,但是为什么这个错误信息显示在屏幕上,而不是重定向到 ls-output-noexist.txt...2.标准错误重定向 标准错误的重定向并不能简单地使用一个专用的重定向符来实现。要实现标准错误的重定向,不得不提到它的文件描述符。...shell 提供了使用文件描述符编号来重定向文件的表示法。由于标准错误等同于文件描述符 2,所以可以使用这种表示法来重定向标准错误。...而此时使用了重定向符 ” < “, 所以标准输入的源更改为 wsq.txt 文件。 ? 重定向标准输入.png 使用重定向符 ” 标准输入的源从键盘变为 wsq.txt 文件。

86120

Linux系列之重定向操作

前言 I/O重定向允许我们将命令的输入和输出重定向到文件中,以及将多个命令连接到一起成为管道。本文就来介绍有关重定向的知识。 标准输入、输出、错误 输出包括两种类型: 程序的结果。...默认情况下,stdout和stderr 都被链接到屏幕上,而不是保存到文件中。重定向允许我们改变输出的去向和输入的来源。...重定向标准输出 为了重定向到其他文件而不是屏幕上,我们使用>重定向操作符,后面跟随文件的名称。...举例来说,我们可以使用重定向操作符来告诉shell,发送ls命令的输出到ls-output.txt文件中,而不是屏幕上。...需要注意的是,使用>重定向操作符会覆盖目标文件。如果要追加内容,我们可以使用>>重定向操作符。 重定向标准错误 为了重定向stderr,我们必须引用其文件描述符。

1.3K20
  • 六.Linux管道及重定向

    把管道作为标准输入输出 管道创建成功后,就可以直接使用 read()和 write()函数对管道进行数据的读写。...而因为shell中都是使用标准输入输出对管道进行读写的,例如ls | grep main.c就是将 ls 的标准输出写到了管道写端,而 grep 的标准输入则从管道读端读取,所以本文也只描述此方法。...文件描述符,本质是非负整数,通常是小整数;它是一个索引,通过该索引可以找到对应的文件。例如,标准输入、标准输出、标准错误的文件描述符默认是 0、1、2 。...调用dup2(fd[0],0),实际上就是将文件描述符 3 指向的文件表项赋值给了文件描述符 0,而文件描述符 0 正是进程默认的标准输入。...文件重定向 文件重定向其实与上面管道重定向到标准输入输出很类似,甚至可以直接采用上面所说的方法来实现。但是此处将讲述一种更加简洁的方法实现。

    2.4K20

    Linux基础IO【II】真的很详细

    C库中与文件描述符对应的是文件指针,与文件描述符0、1和2类似,我们可以直接使用文件指针stdin、stdout和stderr。意味着stdin、stdout和stderr是“自动打开”的文件指针。...在Linux系统中,文件描述符0、1和2分别有以下含义: 文件描述符0(STDIN_FILENO):它是标准输入文件描述符,通常与进程的标准输入流(stdin)相关联。...与标准输出不同,标准错误通常用于输出与程序执行相关的错误和调试信息。 这些文件描述符是在进程创建时自动打开的,并且可以在程序运行期间使用。...这是因为我们将0号文件描述符关闭后,0号文件描述符就不指向标准输入流了。但是当使用输入函数输入时,他们仍然会向0号中输入,但0号已经不指向输入流了,所以就无法完成输入。...这是为什么?但是我们知道这种现象一定和缓冲区有关。 2.重新理解缓冲区 缓冲区本质就是一段内存!!谁申请的?属于谁?为什么要申请 ?

    9310

    Linux入侵 反弹shell

    要想了解“>&”和“0>&1”,首先我们要先了解一下Linux文件描述符和重定向。 linux shell下常用的文件描述符是: 1....标准输入 (stdin) :代码为 0 ,使用 标准输出 (stdout):代码为 1 ,使用 > 或 >>3....我们都知道,标准输入应该是“0而不是“0>”,难道这个跟上一个问题样都是同一个命令的不同写法?让我们试一下“0<&1”,看看会发生什么。 在上图中我们得到了一个交互的shell。果然是这样!...首先引入了三个库socket,subprocess,os,这三个库后面都要用到,然后创建了一个使用TCP的socket,接着执行connect函数连接到黑客主机所监听的端口。...dup2传入两个文件描述符,fd1和fd2(fd1是必须存在的),如果fd2存在,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,fd2这个文件描述符不会发生变化,但是fd2指向的文件就变成了

    6.2K30

    php的各种 IO流 以及用法

    ; 可看到,上面使用了php://stdin 协议,打开了一个标准输入的操作句柄,然后可读取用户在控制台输入的数据 上面的代码也可写成: 的复制,STDIN已打开的不会被关闭 2:php://stdin是只读的 3:请直接使用STDIN常量,而不使用php://stdin 4:使用fgets读取,只能读取一行数据...用法: 在linux中,一切皆文件,当启动系统时,先会启动STDIN标准输入(文件描述符0),之后是STDOUT文件描述符1,STDERR文件描述符2 使用php://fd,可直接调用该文件: <?...名称 描述 resource=要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。 read=链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。...该协议个人不是很会用,并且个人觉得没啥必要学习,所以直接复制php手册的例子吧 <?

    1.4K21

    【Linux】重定向与缓冲区

    fstat 与 stat 很相似,不同之处在于它是通过文件描述符来获取文件的状态,而不是通过路径。它适用于文件已经被打开并且拥有文件描述符的情况。...与 stat 不同,lstat 会返回符号链接本身的元数据,而不是符号链接指向的文件的元数据。如果目标文件是符号链接,stat 会返回链接目标的状态,而 lstat 返回的是符号链接本身的信息。...所以fflush传参stdout本质不是把底层内核文件缓冲区刷到外设上,而是把语言级别的缓冲区,通过文件描述符,写到内核当中 我们代码最后直接close(fd),这里fd是我们打开的设备,所以我们正准备...创建子进程并修改输入/输出 在 进程创建后,子进程继承了父进程的文件描述符。如果我们希望子进程的 stdin 或 stdout 进行重定向,可以使用 dup2。...使用 dup2 进行进程间通信 如果两个进程使用 pipe() 创建管道,dup2 可以让子进程的 stdin/stdout 连接到管道。

    5710

    Linux环境反弹shell原理与姿势

    shell 基础知识 描述符类 文件描述符(File Descriptor,FD)是一个非负整数,用于标识进程打开的文件或其他输入/输出资源(例如:管道、网络套接字等),在Linux和Unix系统中文件描述符是实现文件操作的基本机制之一...文件描述符的主要用途包括: 访问普通文件 访问设备文件 访问网络连接 管道和FIFO通信 在Linux中进程在启动时会自动打开三个文件描述符: 标准输入:standard input 0(默认设备键盘)...随后使用输入重定向将文件内容传递给cat命令,此时会将文件input.txt的内容输出到标准输出 cat < input.txt 输入重定向也可以与其他命令结合使用,例如:可以使用grep命令查找文件中的特定字符串...,可以执行以下命令,这会将错误信息写入error.log文件 non_existing_command 2> error.log (2) 追加错误输出到文件 如果希望将错误信息附加到现有文件,而不是覆盖它...TCP连接到攻击者的机器,同时将所有输入和输出都重定向到这个连接中,使得攻击者可以直接在受害者的shell中执行命令 其他反弹 NC反弹shell 如果目标机器上有nc并且存在-e参数,那么可以建立一个反向

    10710

    【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口

    按照Unix惯例,进程从文件描述符0读入(标准输入),从文件描述符1输出(标准输出),将错误信息写入到文件描述符2(标准错误)。...同样的,cat也不知道它是否写到了一个控制台、一个文件或其他的什么地方。文件描述符的使用与一些惯例——0是标准输入,1是标准输出,2是标准错误,使我们很轻松地实现了cat。...下面的示例程序wc将标准输入连接到管道读取数据的一端: int p[2]; char * argv[2]; argv[0]="wc"; argv[1]=0; pipe(p); if(fork()==0)...在后面这种情况中,read返回0,就好像数据的读取已经到了文件结束部分(end-of-file)。读操作会一直阻塞直到不可能有新数据到来,这就是为什么我们在执行wc之前要关闭子进程的写端口。...当一个进程打开了这个文件,内核将系统调用read与write转发到内核设备的实现上,而不是传递给文件系统。 fstat用来获取文件描述符所指向的对象的信息。

    60560

    干货 | Linux信息收集、渗透测试常用命令

    (-type f: 一般文件类型) find / -perm -g=s -type f # SUID(chmod 4000) - 作为属主运行的文件,而不是启动它的用户。...echo "abc" | wc 标准文件操作符 Linux基本哲学之一就是“一切皆文件”。Linux启动的时候会默认打开三个文件描述符(输入、输出、错误输出)。...|文件描述符|英文名|描述|默认使用设备| |--|--|--| |0|STDIN|标准输入|设备默认键盘(/dev/tty0) |1|STDOUT|标准输出|设备默认显示器(/dev/tty0) |2...|STDERR|标准错误输出|设备默认显示器(/dev/tty0) 文件描述符0: 我们对Linux系统进行的输入操作(比如我想查看文件列表的时候,输入的ls。)...文件描述符1: Linux系统给我们返回的输出(比如我输入ls后,系统给我返回的当前目录中文件的信息) 文件描述符2: Linux系统给我们返回的错误的输出 eaho "123" 1>标准输出.txt

    76510

    Linux下几种反弹Shell方法的总结与理解

    linux文件描述符:linux shell下有三种标准的文件描述符,分别如下: 0 - stdin 代表标准输入,使用<或<< 1 - stdout 代表标准输出,使用>或>> 2 - stderr...,比如查看一个不存在的文件,要把标准错误重定向到标准输出,如果直接cat notexistfile 2>1的话,则会将1看作是一个文件,将标准错误输出输出到1这个文件里而不是标准输出,而&的作用就是为了区分文件和文件描述...下面在该命令后面加上0>&1,代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,这样的话就可以直接在远程输入了...那么,0>&2也是可以的,代表将标准输入重定向到标准错误输出,而标准错误输出重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程: ? ?...有了之前的基础,我们知道3代表的是使用fsockopen函数建立socket返回的文件描述符,这里将标准输入,标准输出和标准错误输出都重定向到了远程 在CentOS上反向连接,输入: php -r '

    1.9K10

    关于 devnull 差点直播吃鞋的一个小问题

    它并不是一个磁盘文件,而是存在于内存中类型为 “character device file” 的文件。...文件描述符与重定向 前面介绍的标准输入、标准输出、错误输出在描述符中的位置不会变化,但是它们的指向是可以改变的,我们用到的重定向操作符 > 和 的。...为了修改上面进程的标准输入为 /dev/null,只需要使用 标准输入会先来查这个文件描述符列表,看 0 号描述符指向的是哪条数据流,再从这个数据流里读取数据。...grep 进程,同时将 nc 进程的标准输出通过管道的方式连接到 grep 进程的标准输入 zsh 进程启动了 wc 进程,同时将 grep 进程的标准输出通过管道的方式连接到 wc 进程的标准输入

    60420

    Linux之基础IO

    ——在磁盘 ——是硬件 ——要通过OS访问 所以,要访问磁盘不能绕过OS——要使用OS提供的接口——OS必定要提供文件级别的系统调用接口。...C语言阶段,我们知道C程序会默认打开三个标准输入输出流:stdin(标准输入设备键盘)、stout(输出设备显示器)、stderr(显示器) 对于C语言的FILE,我们其实不是很熟悉。...访问文件时,是用底层的open系统调用接口,它访问文件需要用到文件描述符,在C语言中,我们访问文件用的是FILE而不是文件描述符,因此可以推测出,FILE中必定有一个文件描述符的字段。...为什么这里.test没有直接打印出结果呢? 答:fd = 1对应的是标准输出,即我们将要打印的内容写到标准输出。...比如:调用fwrite(stdout,…);无论底层的指向如何改变,上层都会用到stdin(标准输入),stdout(标准输出),stderr(标准错误)对应的文件描述符0,1,2.当我们将3号描述符对应的文件指针赋值给

    19430

    Linux:基础IO(一.C语言文件接口与系统调用、默认打开的文件流、详解文件描述符与dup2系统调用)

    ,不会覆盖而是追加 使用 >> 符号进行输出重定向时,会以追加模式打开文件,新的内容会被追加到文件末尾而不会清空原有内容 3.三个默认打开的文件流 在标准C库中,有三个默认打开的文件流,它们分别是...这些变量通常在 头文件中声明,可以直接使用。 stdin: stdin 是标准输入流,通常用于从用户输入设备(如键盘)读取数据。...这些表项存储在内核内存中,而不是用户进程的内存空间中。 当进程打开文件时,内核会在文件描述符表中为该文件分配一个表项,并将相应的信息存储在表项中。...这个缓冲区不是指操作系统的缓冲区,也不是C语言标准库中的缓冲区 6.文件描述符的分配规则 fd的分配规则:最小的没有被使用的数组下标,会分配给最新打开的文件!...这个系统调用通常用于重定向标准输入、标准输出和标准错误流,例如将一个文件描述符复制到标准输出流(文件描述符 1)或标准错误流(文件描述符 2)。

    37410

    【高级编程】linux进程间通信总结

    ,父进程由管道向子进程传输数据,直接对管道描述符调用read和write。...我们知道,一个进程预定义了三个流,标准输入,标准输出和标准出错,所以,管道更常用的方法是将管道描述符复制为标准输入和标准输出,在此之后通常子进程执行另一个程序,该程序从标准输入(已经创建的管道)读数据,...如果type是"r",则文件指针连接到cmdstring的标准输出。如果type是"w",则文件指针连接到cmdstring的标准输入。 使用popen减少了代码的编写量。...如果要互相通信的几个进程没有从公共祖先那里继承文件描述符,可以使用FIFO,文件系统中的路径名是全局的,各进程都可以访问,因此可以用文件系统中的路径名来标识一个IPC通道。...与文件描述符不同,IPC标示符不是小的整数,当一个IPC结构被创建,以后又被删除时,与这种结构相关的标示符连续加1,直至达到一个整形数的最大值,然后又回转到0。 标示符是IPC对象的内部名。

    2K70

    【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作的秘密

    通过文件描述符,进程可以访问和操作对应的文件或资源,而无需记住复杂的文件名或路径 重定向,则是Linux shell提供的一种强大功能,它允许用户改变标准输入(stdin)、标准输出(stdout...通过重定向,用户可以将命令的输出直接发送到文件、另一个命令的输入,或者忽略某些输出,从而灵活地控制数据的流向,实现复杂的自动化任务 我将带领大家深入探索Linux文件描述符和重定向的奥秘。...语义中,文件描述符0、1、2被赋予了特殊的含义,分别代表标准输入(STDIN_FILENO)、标准输出(STDOUT_FILENO)和标准错误(STDERR_FILENO)所以我们打开一个文件,它的文件描述符是从...目前我们打开的文件的文件描述符是1,而printf它只能1,所以打印的内容就被重定向到了log.txt中 为什么是刷新之后有,不刷新就没有呢?...,但是他直接从文件里面读取了,那么到底什么是重定向,我们来画图了解一下 重定向 2> 2>实际上指的是将标准错误(stderr,文件描述符为2)重定向到指定的文件或位置。

    19810

    【Linux系统调用API】一、open与close函数

    ,在前面我们已经说过文件描述符1代表标准输出,这时候通过open()打开一个文件,我们知道,当打开一个文件的时候会使用一个当前空闲的最小文件描述符,因为前面我们把标准输出关闭了,所以当前空闲的最小文件描述符...虽然1号文件描述符当前已经不是标准输出(终端显示屏)了,但是stdout依然是指向1号文件描述符的,实际上这就相当于把open()打开的文件当作标准输入输出,printf()打印的内容都会打印到test.log...实际上,在Linux下启动一个进程,就会默认打开三个文件描述符:0标准输入、1标准输出、2标准错误。它们分别对应C语言中的stdin、stdout、stderr。...当我们每次打开一个文件,就会分配给这个文件一个当前空闲的最小文件描述符,如果此时标准输入0、标准输出1、标准错误2空闲,那么也会把这个文件描述符分配给新打开的文件但是这三个文件描述符0、1、2与stdin...、stdout、stderr的对象关系不会变,并且在后续的操作中会把0、1、2指向的新文件当作标准输入输出和标准错误去处理,并将输入输出或错误信息打印到这个文件。

    19410

    反弹Shell

    服务 B主机连接到A主机的9090的tcp服务 A主机通过tcp服务把命令发到B主机 B主机读取命令并且在bash中执行 B主机把执行结果发给A主机 Linux文件描述符,Linux...shell的三种标准的文件描述符 0 - stdin 代表标准输入,使用<或<< 1 - stdout 代表标准输出,使用>或>> 2 - stderr 代表标准错误输出,使用2>或2>> 参数解释:...,比如查看一个不存在的文件,要把标准错误重定向到标准输出,如果直接cat notexistfile 2>1的话,则会将1看作是一个文件,将标准错误输出输出到1这个文件里而不是标准输出,而&的作用就是为了区分文件和文件描述...0>&1 代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,这样的话就可以直接在远程输入了: 那么,0>&...2也是可以的,代表将标准输入重定向到标准错误输出,而标准错误输出重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程 python实现反弹shell: 首先本地还需要监听一个端口

    75130

    【linux学习指南】Linux管理文件与处理数据二(重定向与管道)

    这些文件描述符指向相应的设备文件,操作这些文件描述符就是在进行设备操作。例如,printf操作的是标准输出的文件描述符1,而scanf操作的是标准输入的文件描述符0。...Linux的重定向技术 Linux的重定向技术允许你将输入输出流重新指向文件或其他设备,而不是使用默认的标准输入(stdin)、标准输出(stdout)或标准错误(stderr)。...输入重定向 将命令的输入从文件读取,而不是从键盘读取。...2>&1 的意思是将标准错误(文件描述符2)重定向到标准输出(文件描述符1)。 管道 管道将一个命令的输出直接传递给另一个命令作为输入。...文件描述符 在Linux中,除了标准输入(0)、标准输出(1)和标准错误(2)之外,你还可以使用其他文件描述符进行重定向。你可以自定义文件描述符进行高级操作。

    39010
    领券