精华内容
下载资源
问答
  • Linux C语言管道读取

    千次阅读 2019-02-11 00:15:05
    管道读取写端已经关闭的管道,当数据全部读完后,写端返回0 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int ...

    管道读取写端已经关闭的管道,当数据全部读完后,写端返回0

    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    	int fd[2];
    	if(pipe(fd) < 0)
    	{
    		perror("pipe error");
    		exit(1);
    	}
    	pid_t pid;
    	if((pid = fork())<0)
    	{
    		perror("fork error");
    		exit(1);
    	}
    	else if(pid>0)
    	{
    		sleep(5);
    		close(fd[1]);
    		while(1)
    		{
    			char c;
    			if(read(fd[0],&c,1) == 0)
    			{
    				printf("\nwrite-end of pipe closed\n");
    				break;
    			}
    			else
    			{
    				printf("%c",c);
    			}
    		}
    		close(fd[0]);
    		wait(0);
    
    	}
    
    	else
    	{
    		close(fd[0]);
    		char *s = "1234";
    		write(fd[1], s, sizeof(s));
    		close(fd[1]);
    	}
    }
    
    
    

     

    展开全文
  • shell read 命令除可以标准输入流中读取字符串给变量外,还能特定的文件中向变量赋值文件中的“一行内容”。每次给变量赋值为管道内容的输入的行内容。 1.例:read_file.sh 图1.read_file.sh读取文件内容 【3】...

    shell read 命令除可以从标准输入流中读取字符串给变量外,还能从特定的文件中向变量赋值文件中的“一行内容”。每次给变量赋值为管道内容的输入的行内容。

    1.例:read_file.sh

    图1.read_file.sh读取文件内容

    【3】对CountNum赋初始值为1.

    【5-10】用cat命令打开for_read.c(在shell界面直接使用这个命令时,for_read.c的所有内容将会直接被展现在屏幕上),通过管道 '|' 把for_read.c当前行的内容赋值给read命令后的变量line。打印行号和此行的内容,行号增加。如此循环,直到文件读取完毕,此时read命令返回值不为0.

    【8-10】这是变量增1的两种表达方式。注意第十行的增1方式,前面的冒号":"不可省。

     

    2.for_read.sh中的内容:

    图2.for_read.c文件中的内容

    3.运行脚本观看结果

    首先,修改脚本权限:chmod +x  read_file.sh

    运行脚本:./read_file.sh

    运行结果为:

    图3.read_file.sh脚本运行结果

    4.总结

    前辈们写的工具都是考虑的全面,从最简单的功能设计开始,都是会涉及到有可能且合理的功能上面去的。

    展开全文
  • Linux read命令用于标准输入读取数值。 read 内部命令被用来标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。 语法 read [-ers] [-a aname] [-d delim...

    Linux read命令用于从标准输入读取数值。

    read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

    语法

    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

    参数说明:

    • -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
    • -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
    • -p 后面跟提示信息,即在输入前打印提示信息。
    • -e 在输入的时候可以使用命令补全功能。
    • -n 后跟一个数字,定义输入文本的长度,很实用。
    • -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
    • -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
    • -t 后面跟秒数,定义输入字符的等待时间。
    • -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

    实例

    1、简单读取

    #!/bin/bash
    
    #这里默认会换行  
    echo "输入网站名: "  
    #读取从键盘的输入  
    read website  
    echo "你输入的网站名是 $website"  
    exit 0  #退出

    测试结果为:

    输入网站名: 
    www.qq.com
    你输入的网站名是 www.qq.com

    2、-p 参数,允许在 read 命令行中直接指定一个提示

    #!/bin/bash
    
    read -p "输入网站名:" website
    echo "你输入的网站名是 $website" 
    exit 0

    测试结果为:

    输入网站名:www.qq.com
    你输入的网站名是 www.qq.com

    3、-t 参数指定 read 命令等待输入的秒数

    当计时满时,read命令返回一个非零退出状态。

    #!/bin/bash
    
    if read -t 5 -p "输入网站名:" website
    then
        echo "你输入的网站名是 $website"
    else
        echo "\n抱歉,你输入超时了。"
    fi
    exit 0

    执行程序不输入,等待 5 秒后:

    输入网站名:
    抱歉,你输入超时了

    4、使用 -n 参数设置 read 命令计数输入的字符。

    当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

    #!/bin/bash
    
    read -n1 -p "Do you want to continue [Y/N]?" answer
    case $answer in
    Y | y)
          echo "fine ,continue";;
    N | n)
          echo "ok,good bye";;
    *)
         echo "error choice";;
    
    esac
    exit 0

    该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。

    只接收 2 个输入就退出:

    #!/bin/bash
    
    read -n2 -p "请随便输入两个字符: " any
    echo "\n您输入的两个字符是:$any"
    exit 0

    执行程序输入两个字符:

    请随便输入两个字符: 12
    您输入的两个字符是:12

    5、-s 选项能够使 read 命令中输入的数据不显示在命令终端上

    (实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。

    #!/bin/bash
    
    read  -s  -p "请输入您的密码:" pass
    echo "\n您输入的密码是 $pass"
    exit 0

    执行程序输入密码后是不显示的:

    请输入您的密码:
    您输入的密码是 1234

    6.一次读取多个变量

    7.读取文件

    每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。

    通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。

    测试文件 test.txt 内容如下:

    123
    456
    runoob

    测试代码:

    #!/bin/bash
      
    count=1    # 赋值语句,不加空格
    cat test.txt | while read line      # cat 命令的输出作为read命令的输入,read读到>的值放在line中
    do
       echo "Line $count:$line"
       count=$[ $count + 1 ]          # 注意中括号中的空格。
    done
    echo "finish"
    exit 0

    执行结果为:

    Line 1:123
    Line 2:456
    Line 3:runoob
    finish

    使用 -e 参数,以下实例输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录存在的):

    $ read -e -p "输入文件名:" str 
    输入文件名:a
    a.out    a.py     a.pyc    abc.txt  
    输入文件名:a
    展开全文
  • shell 脚本支持从管道读取

    千次阅读 2017-11-30 13:10:07
    #标准输入读取数据 exec 0 #关闭标准输出。(是否也意味着解除之前的文件绑定??) 使用方法 cat a .txt | ./testpipe .sh or ./testpipe .sh a .txt 下面链接对标准输入和输出的绑定...

    testpipe.sh

    #!/bin/bash
    
    if [ $# -gt 0 ];then
        exec 0<$1;    #将文件绑定到标准输入(0-标准输入 1-标准输出 3-标准错误),默认第一个参数是输入的文件;
    fi
    
    while read line
    do
        echo $line;
    done<&0;    #从标准输入读取数据
    exec 0<&-   #关闭标准输出。(是否也意味着解除之前的文件绑定??)

    使用方法

    cat a.txt | ./testpipe.sh

    or

    ./testpipe.sh a.txt

    下面链接对标准输入和输出的绑定有详细介绍
    http://www.tldp.org/LDP/abs/html/x17974.html

    展开全文
  • LinuxLinux管道

    万次阅读 多人点赞 2018-08-14 20:28:25
    管道Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以...
  • //可以实现对管道的多次读取  #include #include #include #include int main() { FILE *read_fp;  char buffer[BUFSIZ+1];  int chars_read;  memset(buffer,'\0',sizeof(buffer));  ...
  • linux管道使用_如何在Linux上使用管道

    千次阅读 2020-10-07 18:38:47
    linux管道使用Fatmawati Achmad Zaenuri/Shutterstock.comFatmawati Achmad Zaenuri / Shutterstock.comUse Linux pipes to choreograph how command-line utilities collaborate. Simplify complex processes and ...
  • read line n=1 bInString=0 bIsLastSpace=0 for(( i = 0; i ${#line}; ++i)); do temp=${line:i:1} if [ "$temp" = "\"" ]; then param[$n]=${param[$n]}$temp
  • 再说linux命令行的管道

    千次阅读 2020-11-08 01:50:13
    这是常见的用法,说说管道,pipe是 liunx上常见的IPC方法,在 linux system programming 中有两种,有名管道和无名管道,有名管道可以用在任意两个进程,而无名管道只能用在有亲属关系的进程,如我们一般所写的...
  • 从管道读取数据

    千次阅读 2009-03-24 14:08:00
    管道的写端存在时,如果请求的字节数目大于PIPE_BUF,则返回管道中现有的数据字节数,如果请求的字节数目不大于PIPE_BUF,则返回管道中现有数据字节数(此时,管道中数据量小于请求的数据量);或者返回请求的字节...
  • Linux下使用管道进行通信

    千次阅读 2017-02-16 15:29:35
    Linux下使用管道进行编程http://www.lupaworld.com/tutorial-view-aid-10366.html简介本文中,我们将学习GNU/Linux管道管道模型虽然很老但是就算是现在它仍然是一个十分有用的进程间通信机制。我们将会学习什么...
  • linux 管道

    2014-02-28 12:49:55
    管道Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。 有名管道叫named pipe或者...
  • linux进程无名管道通信

    万次阅读 2015-05-21 13:34:21
    linux进程无名管道通信 #include #include #include #include void pipe_read(int pipes[]); void pipe_write(int pipes[]); int main() { int pipes[2]; // pipes[0] 读取, pipes[1] 写入 pid_t pid; // pid_t...
  • Linux之命名管道及其使用

    千次阅读 2019-04-13 13:15:10
    管道 匿名管道:可以用于有血缘关系之间的进程间的通信(pipe) ...命名管道:为管道创建一个管道文件,这个管道文件就是管道的名字,但实质还是内核中的缓冲区。 建立管道文件 #include <sys/types.h>...
  • linux命名管道

    千次阅读 2017-09-05 17:46:52
    ●无名管道 主要用于父进程与子进程之间,或者两个兄弟进程之间。在linux系统中可以通过系统调用建立起一个单向的通信
  • Linux——匿名管道的详解1.进程间通信的概念2.匿名管道2.1匿名管道的本质2.2匿名管道的创建方法及其数据拷贝过程2.3管道中数据的生命周期 1.进程间通信的概念 什么是进程间通信? 进程间通信就是在不同进程之间传播...
  • linux系统——管道

    千次阅读 2018-11-06 11:47:16
    一个进程连接数据到另一个进程时,使用管道(pipe),通常是把一个进程的输出通过管道连接到另一个进程的输入 linux的bash就是通过管道连接的: 例如:ps |grep hh,键盘敲入ps命令,ps执行后的输出作为grep...
  • linux--管道管道容量

    千次阅读 2017-05-28 17:25:54
    管道 管道(pipe) 管道是进程间通信的主要手段之一。一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端。管道是一种特殊的文件,它不属于...在Linux
  •  管道在Liunx中是一个常见的通信工具,管道在我们生活中顾名思义就是传输东西的,而在Linux管道的工作原理是什么呢? 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中看不到.所以...
  • 子进程从管道读取字符并转化为大写字母。读到x结束。(非字母字符就输出本身) 相关的系统函数:fork(),read(),write(),pipe(); 笔者在telnet上写这些代码,由于才疏学浅,不知道怎样在telnet上复制...
  • linux管道

    千次阅读 2012-09-24 19:18:14
    管道是单向的字节流,它将某个进程的标准输出连接到另一个进程的标准输入。管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的... 在linux管道是通过指向同一个临时的VFS inode的两个file数
  • linux shell之逐行读取文件内容

    千次阅读 2018-08-29 15:26:46
    #逐行读取文件内容 #方法1:while循环中执行效率最高,最常用的方法。 function while_read_LINE_bottm(){ While read LINE do echo $LINE ...管道法: cat $FILENAME | while read LINE func...
  • Linux 管道

    千次阅读 2018-04-19 00:16:04
    (多进程通讯中要用锁控制,防止一个进程在读取管道里数据没读完就被其他进程读走之类的问题)管道概念管道用的是利用文件系统file结构,和VFS索引节点inode来完成的结构。通过两个file文件指...
  • linux shell 逐行读取文件行

    千次阅读 2015-07-28 10:48:45
    linux shell 读取文件行
  • linux--管道pipe

    千次阅读 2011-09-29 20:25:29
    本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为:  · 限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓冲区的大小为1...
  • linux——管道详解

    千次阅读 2018-03-15 10:34:05
    管道Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。 有名管道叫named pipe或者...
  • linux 无名管道和有名管道fifo

    千次阅读 2017-08-15 20:23:24
    无名管道简介:管道是半双工的,数据只能向一个方向...管道的读写规则:fifo先进先出规则,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是缓冲区的头部读出数据。无名管道相关函数说明:#include <unistd.
  • Linux创建管道

    千次阅读 2014-08-26 19:03:53
    管道是两个进程的连接器,单向,一端作为输入。普通管道只能用于父子进程的进程间通信,命名管道可以实现不同进程间的通信。 创建管道函数 #include<stdio.h> #include<unistd.h> #include<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,034
精华内容 15,613
关键字:

linuxread从管道读取

linux 订阅