Linux 为什么复制的文件一直增加dup后缀?dup函数只有一个参数,也就是输入一个fd,可是没有另外一个参数说,要把这个fd复制给谁?
下面这个小程序,调用fd的结果是,打开的一个文件fd被复制到了标准输出,以至于execl调用的打印内容,被重定向到了文件当中 。
#include stdio.h
#include stdlib.h
#include sys/types.h
#include unistd.h
#include fcntl.h
#include sys/stat.h
int main(void){
int filedes;
if((filedes=open("dd.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))0)
fprintf(stderr,"%s ","open file error");
close(1);
dup(filedes);
close(filedes);
execlp("ls","-l",(char * )0);
return 0;
}
所以看起来dup程序就是要复制一个fd到stdout 。是这样的吗,如果我要dup到stdout以外的fd怎么办呢?
------解决思路----------------------
dup返回的是当前最小可用描述符,你这里会重定向到标准输出是因为你close(1),使标准输出描述符可以被用 , 所以dup返回了1.
如果我要dup到stdout以外的fd , 使用dup2
求linux命令 打印文本文件内容到控制台 多个文件可以左右分栏打印,我记得有这么一个命令,想不起来了最简单的你 a.out1.txt
或者用dup2,重定向 。
你首先要搞清楚控制台上的输出是怎么输出的,比如说是程序里面printf出来的,脚本里面echo出来的等等 。
然后做一个写日志的函数代码那个输出 。也可以把标准输出的文件描述符dup到你要写的文件上面 。
最简单的你 a.out1.txt
或者用dup2,重定向 。
函数执行 , 产生的标准输出,已经再控制台了,我再把它重定向 。
你首先要搞清楚控制台上的输出是怎么输出的,比如说是程序里面printf出来的, 脚本里面echo出来的等等 。
然后做一个写日志的函数代码那个输出 。也可以把标准输出的文件描述符dup到你要写的文件上面 。
execvp(args[0], args) 这个函数运行产生的结果 。
使用命令重定向操作符可以使用重定向操作符将命令输入和输出数据流从默认位置重定
向到不同的位置 。输入或输出数据流的位置即为句柄 。
下表将列出可用的句柄 。
句柄句柄的数字代号 描述
STDIN0键盘输入
STDOUT1输出到命令提示符窗口
STDERR2错误输出到命令提示符窗口
UNDEFINED 3-9这些句柄由应用程序单独定义,并且是各个工具特定的 。
数字 0 到 9 代表前 10 个句柄 。可以使用命令 Cmd.exe 运行程序并将该程序前 10 个
句柄中的任何一个重定向 。要指定想使用的句柄,可在重定向操作符前面键入该句柄的
数字 。如果未定义句柄,则默认的重定向输入操作符是 0,而默认的重定向输出
操作符是 1 。键入或操作符之后,必须指定要读取或写入数据的位置 。可以指定
文件名或另一个现有的句柄 。
要指定重定向到现有句柄 , 请使用与 () 字符,后面接要重定向的句柄号
(例如 句柄#) 。例如,下面的命令可以将句柄 2(即 STDERR)重定向到
句柄 1(即 STDOUT):
21
下表列出了可用于将输入和输出数据流进行重定向的操作符 。
重定向操作符 描述
将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口或句柄中 。
从文件中而不是从键盘或句柄中读入命令输入 。
将命令输出添加到文件末尾而不删除文件中的信息 。
将一个句柄的输出写入到另一个句柄的输入中 。
从一个句柄读取输入并将其写入到另一个句柄输出中 。
| 从一个命令中读取输出并将其写入另一个命令的输入中 。也称作管道 。
推荐阅读
- sap轻量级扩展组件打包,sap扩展分类账
- mysql8.0如何改密码,mysql8026修改密码
- gis集成背景,gis专业背景
- 海南退役军人公众号关注,海南省退役军人管理局
- c语言控制键盘的函数 c语言操作键盘
- redis连接池qps,Redis连接池泄漏如何定位问题
- 如何让农产品推广起来,农产品如何进行推广和引流
- 手机下载太慢怎么解决安卓,手机下载太慢怎么解决安卓版
- 两个自定义函数c语言 两个自定义函数c语言怎么表示