导航:首页 > 操作系统 > linux重定向c

linux重定向c

发布时间:2022-05-13 23:45:21

linux系统,c代码里执行shell命令重定向问题

你可以试试popen 这个函数去实现下:


#include<stdio.h>
#include<string.h>

intmain(void)
{
chartmp_buf[1024+1];
FILE*fp;
memset(tmp_buf,0,sizeoftmp_buf);
fp=popen("ls-l","r");
if(fp!=NULL)
fgets(tmp_buf,sizeof(tmp_buf),fp);
printf("out:[%s] ",tmp_buf);
pclose(fp);
return0;
}

⑵ C语言中什么是重定向

重定向不是C语言而是是shell(命令行窗口)做的事情,它把文件接到程序的标准输入、标准输出、或标准错误流上。
如果程序准备用重定向来做,直接从标准输入读数据,比如scanf或者cin,然后往标准输入写结果,printf或者cout。
然后程序执行的时候,在命令行窗口下使用重定向来指定将输出重定向到一个文件:
例如,当你的程序名叫做test.exe:
执行 test.exe > essayct.txt。

⑶ linux 管道和输入输出重定向如何用c语言结合实现

两种方法(实用)
1:直接系统调用,管道建立分命名管道和非命名管道,使用参考unix手册或UNP第二卷进程间通信。输入输出重定向就用read(source);write(destination);
2:使用系统shell
功能:即调用
system("cat
file.a
|
grep
bb
>
file.c");

⑷ Linux c 符号的重定位信息

编译器生成一个目标文件后,其并不知道代码和变量最终的存储位置,也不知道定义在其他文件中的外部符号。因此编译器会生成一个重定位表目,里面存储着关于每一个符号的信息。这个表目告知链接器在合并目标文件时应该如何修改每个目标文件中对符号的引用。这种重定位表目存储在.rel.text 段中和.rel.data 段中。该表目可以理解为一个结构体,其中存储着每一个符号的重定位信息。
offset表示该符号在存储的段中的偏移值。symbol 代表该符号的名称,字符串实际存储在.strtab 段中,这里存储的是该字符串首地址的下标。type表示重定位类型,链接器只关心两种类型,一种是与PC相关的重定位引用,另一种是绝对地址引用。
PC相关的重定位引用表示将当前的PC值(这个值通常是下一条指令的存储位置)加上该符号的偏移值。绝对地址引用表示将当前指令中已经指定的地址引用直接作为跳转的地址,不需要进行任何修改。
有了这些信息,链接器就可以将符号在存储段中的偏移值加上该段在重定位后该段的新地址,这样就得到了一个新的引用地址,而这个引用地址就是该符号的最终地址。同样,在程序所有引用该地址的部分都要作修改,使用这个新的绝对地址代替旧的偏移地址。当新的符号地址被修改完毕之后,链接器的工作就结束了。

⑸ linux重定向的基本概念

(这是理解后面的知识的前提,请务必理解)
a、 I/O重定向通常与 FD 有关,shell的FD通常为10个,即 0~9;
b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor有关;
c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
i、 bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
j、 ( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的标准输入、标准输出、标准错误和任何其他打开的文件描述符。
k、 exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

⑹ 简述linux系统中有哪些重定向的方式

重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令。这部分涉及到的比较多的命令主要有:

cat:连接文件 sort:排序文本行 uniq:忽略或者报告重复行

wc:统计文件的行数、词数、字节数

grep:打印匹配制定模式的行

head:输出文件的头部 tail:输出文件的尾部

tee:从标准输入读,并往标准输出或者文件写

  1. 重定向标准输出

    使用>可以将本来出现在屏幕的标准输出信息重定向到一个文件中。

    使用>>可以在实现重定向时不覆盖原有内容,而是在文件末尾追加内容。

  2. 重定向标准错误信息到文件

    使用文件描述符,在shell中,默认用数字0,1,2分别代表标准输入、标准输出、标准错误。

  3. 屏蔽不想看到的信息

    Linux中有一个特殊的文件/dev/null,这个文件叫做bit bucket,可以接受输入信息但是什么都不做。例如:ls/usr/> /dev/null

  4. 重定向标准输入

    cat命令可以接受一组文件为参数,将这些文件复制到标准输出。我们前面的例子中已经多次使用到cat命令来将文本文件的内容读取到屏幕上。cat还有一个很重要的功能:接受一组文件,然后通过重定向将他们重新组合到一个文件中。

    cat ls1 ls2 > ls这个命令将ls1和ls2文件中的内容合并到ls文件中了。cat命令的这种功能不仅仅适用于文本文件,同样对二进制文件有效。这个场景主要在将多个压缩包文件合并到一个压缩包中用到。

    cat也可以不传递参数,这种情况下,cat会重定向标准输入到标准输出。

  5. 管道

    Linux提供|操作符,该操作符可以将一个命令的输出作为另一个命令的输入,这样通过多个命令的协作来完成一些比较复杂的内容。比如,我们可以通过uniq命令来排除重复的行。但是uniq命令往往需要和sort命令配合使用。因为uniq接收一组排好序的文本,而刚好sort可以将文本行排序。


⑺ linux重定向命令应用及语法

1.
标准输入的控制
语法:命令
文件将命令的执行结果送至指定的文件中。
例如:
ls
-l
>
list
将执行ls
-l
命令的结果写入文件list
中。
语法:命令>!
文件将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。
例如:
ls
-lg
>!
list
将执行ls
-
lg
命令的结果覆盖写入文件list
中。
语法:命令>&
文件将命令执行时屏幕上所产生的任何信息写入指定的文件中。
例如:
cc
file1.c
>&
error
将编译file1.c
文件时所产生的任何信息写入文件error
中。
语法:命令>>
文件将命令执行的结果附加到指定的文件中。
例如:
ls
-
lag
>>
list
将执行ls
-
lag
命令的结果附加到文件list
中。
语法:命令>>&
文件将命令执行时屏幕上所产生的任何信息附加到指定的文件中。
例如:
cc
file2.c
>>&
error
将编译file2.c
文件时屏幕所产生的任何信息附加到文件error
中。
3.
命令语法

⑻ 请解释linux中的“重定向”的概念,由浅入深!

重定向是个操作系统的概念
它的主要含义是将原本从一个输入输出设备的输入输出操作,转向到从另外一个输入输出设备进行。
例如:linux系统中sh启动进程时会默认打开三个输入输出文件:标准输入文件、标准输出文件和标准错误文件(一般情况下是控制台),他们的文件句柄分别是0,1,2,
有时候你需要将进程的输出输出到一个文件的时候,你会这样处理:a>file.txt(假定a是程序名称)
那么sh就会将默认的两个输出文件1和2改为:file.txt
这就叫重定向。
例如下面的sh命令:a
<fa.txt
1>fo.txt
2>fe.txt
sh就将0的输入文件该向为:fa.txt,也就是将输入改为从文件fa.txt
将1输出文件重定向为:fo.txt
将2输出文件重定向为:fe.txt
一般这些都是操作系统记得内容,基本上与开发没有关系,你说gfortran要用重定向,我不太明白。

⑼ 如何使用Linux重定向符

1,标准输入的控制
语法:命令< 文件将文件做为命令的输入。
例如:

mail -s “mail test” [email protected] < file1
将文件file1 当做信件的内容,主题名称为mail test,送给收信人。
2,标准输出的控制
语法:命令> 文件将命令的执行结果送至指定的文件中。
例如:

ls -l > list
将执行“ls -l” 命令的结果写入文件list 中。
语法:命令>! 文件将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。
例如:

ls -lg >! list

将执行“ls - lg” 命令的结果覆盖写入文件list 中。
语法:命令>& 文件将命令执行时屏幕上所产生的任何信息写入指定的文件中。
例如:

cc file1.c >& error
将编译file1.c 文件时所产生的任何信息写入文件error 中。
语法:命令》 文件将命令执行的结果附加到指定的文件中。
例如:

ls - lag 》 list

将执行“ls - lag” 命令的结果附加到文件list 中。
语法:命令》& 文件将命令执行时屏幕上所产生的任何信息附加到指定的文件中。
例如:

cc file2.c 》& error
将编译file2.c 文件时屏幕所产生的任何信息附加到文件error 中。
关于输入、输出和错误输出
在字符终端环境中,标准输入/标准输出的概念很好理解。输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息;与 Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出于标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。
在 Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示 standard)。在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。
输入、输出及标准错误输出主要用于 I/O 的重定向,就是说需要改变他们的默认设置。
先看这个例子:

$ ls > ls_result
$ ls -l 》 ls_result
上面这两个命令分别将 ls 命令的结果输出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是输出到屏幕上。">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个 ">" 符号,即 "》" 则表示不清除原来的而追加输出。
再来看一个稍微复杂的例子:

$ find /home -name lost* 2> err_result
这个命令在 ">" 符号之前多了一个 "2","2>" 表示将标准错误输出重定向。由于 /home 目录下有些目录由于权限限制不能访问,因此会产生一些标准错误输出被存放在 err_result 文件中。大家可以设想一下 find /home -name lost* 2》err_result 命令会产生什么结果?
如果直接执行 find /home -name lost* > all_result ,其结果是只有标准输出被存入 all_result 文件中,要想让标准错误输出和标准输入一样都被存入到文件中,那该怎么办呢?看下面这个例子:

$ find /home -name lost* > all_result 2>& 1
上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 all_result 这个文件中。这样我们就可以将所有的输出都存储到文件中了。为实现上述功能,还有一种简便的写法如下:

$ find /home -name lost* >& all_result
如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:

$ find /home -name lost* 2> /dev/null
有兴趣的朋友,可以试验下如下的几种重定向方式,看看结果是什么?

$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result
另外一个非常有用的重定向操作符是 "-",请看下面这个例子:

$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
另外,几种不常见的用法:

n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭

⑽ linux中的重定向问题

不管是>>还是2>>都属于追加重定向。也就说,新重定向的内容不会覆盖掉原有文件里的内容,而是另起一行。只不过>>,是只对正确的内容或者结果进行重定向;而2>>,只对错误的内容或结果进行重定向。
比如原有文件a.txt,里面有一内容this is a test。现在我执行了命令:ls -l >> a.txt, 那么这个时候,因为的ls -l这个命令是正确的,所以ls -l 这个命令的结果将会被追加到a.txt中,以行为单位,写在了this is a test这段内容下面。
相反如果我执行了命令aaaa 2>> a.txt,那么因为这个命令是错的,所以会把我执行的aaaa命令之后所提示的错误提示(比如: command not found)追加到a.txt,同样是在this is a test这段话的下面。

而> 和2>却是不追加,而是覆盖掉原有内容,其他意思一样。

阅读全文

与linux重定向c相关的资料

热点内容
如何能知道网站服务器地址 浏览:646
程序员月薪5万难吗 浏览:136
如何评价程序员 浏览:800
云虚机和服务器的区别 浏览:403
广西柳州压缩机厂 浏览:639
arm开发编译器 浏览:833
51单片机的核心 浏览:746
看电视直播是哪个app 浏览:958
将c源程序编译成目标文件 浏览:787
再要你命3000pdf 浏览:558
ai软件解压软件怎么解压 浏览:520
文件夹怎样设置序列号 浏览:963
javascriptgzip压缩 浏览:247
易语言怎么取出文件夹 浏览:819
苹果xs手机加密app哪里设置 浏览:605
超声雾化器与压缩雾化器 浏览:643
模拟实现进程调度算法 浏览:388
现在的压缩包都是加密 浏览:331
施工员找工作去哪个app 浏览:632
安卓手机的游戏怎么打开 浏览:200