
正文
dup命令linux dump linux
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
LINUX 标准错误输出重定向
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
用途:在后台运行
一般两个一起用
3.为什么呢 21 要写在后面?
首先是command file将标准输出重定向到file中, 21 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
21 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。file 后输出才被重定向到file,但标准错误仍然保持在终端。
用strace可以看到:
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
这里的2和之间不可以有空格,2是一体的时候才表示错误输出。
相关问答
Q1: ping出现dup 网易 linux怎么解决
linux下查看某个进程dup命令linux的启动命令的方法dup命令linux: 在Linux下dup命令linux, 如果需要查看进程的启动时间dup命令linux, 常用ps aux命令dup命令linux,但是ps aux命令的缺陷在于只能显示时间到年、日期、或者时间, 无法具体到年月日时分秒。
Q2: Linux 为什么复制的文件一直增加dup后缀?
dup函数只有一个参数dup命令linux,也就是输入一个fd,可是没有另外一个参数说,要把这个fd复制给谁?
下面这个小程序,调用fd的结果是,打开的一个文件fd被复制到dup命令linux了标准输出,以至于execl调用的打印内容,被重定向到dup命令linux了文件当中。
#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
Q3: linux下C语言编程,管道,dup,fork,疑问的是,为什么连用那么多close?必须要close? 代码如下
文件描述符0,1,2分别表示标准输入标准输出,标准错误输出, 所以在子进程里close(1)是关闭了标准输出, 然后用dup(fda[1]);此时未用的最小文件描述符就是1(被关闭);这里关闭fda[0]就是为了说明在子进程是管道的写端(fda[0],不关闭是可以的为了保险起见关闭).然后子进程退出会调用系统程序ls,于是当前的文件目录就被发送到管道中.父进程同理, 就是将标准输出作为管道的读端,它读到的是子进程ls后的内容,对文件计数,
Q4: linux的dup是复制文件描述字还是代替
其实就是这样:
dup()或者dup2()主要是将某个特定的文件描述字输出输出的重定向!
他们保证将复制的文件描述字到当前未打开的最小描述字!事例代码int fd;if(argc!=2){err_quit("Usage :filename");}if((fd=creat(argv[1],0644))
Q5: Linux dup dup2函数理解
在linux中,我们需要复制文件描述符,下面是我对文件描述符的理解
int dup(int fd); // 复制一个已经存在的文件描述符,如果成功,返回复制成功后的文件描述符,失败返回-1
int dup(int fd, int fd2); // 复制一个文件描述符,fd表示已经存在的打开的文件描述符,fd2是指定新的文件描述符,如果fd2等于fd,则直接返回,如果fd2存在并且打开,则先close(fd2)后,重新打开,这样fd2和fd就指向了同一个文件(共享打开的文件),如果fd2不存在或者没有打开,则打开fd2,并且指向fd所指向的文件。函数的返回值和fd2一致。该函数可以实现文件的重定位。
每个进程都有一个文件描述符表,每个描述符占用一个描述符项,每个文件描述符可以描述成这样
struct fileDescription {
int index;
void *pointer;
};
除了整形,还有一个指针,指向文件表,内核为所有打开文件维持一张文件表,每个文件表项包含:
1)文件状态标志(读、写、添写、同步和非阻塞等)
2)当前文件的偏移量
3)指向该文件v节点表项的指针
v节点表中包含了文件所有者、文件长度、文件所在的设备、指向文件实际数据块在磁盘上所在位置的指针等等
下面给出一个例子:
#include iostream
#include stdio.h
#include fcntl.h
#include sys/stat.h
#include unistd.h
#include string.h
using namespace std;
int main()
{
cout "Hello world!" endl;
int fd = open("a.txt", O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd 0)
{
printf("open a.txt failed, fd = %d\n", fd);
return -1;
}
printf("open a.txt success, fd = %d\n", fd);
fflush(stdout);
// 复制标准输出的文件描述符
int nfd = dup(STDOUT_FILENO);
int fileFd = dup2(fd, STDOUT_FILENO);
if (fileFd 0)
{
printf("dup2 stdout_fileno failed, fileFd = %d\n", fileFd);
return -1;
}
printf("重定向标准输出到a.txt, fileFd = %d\n", fileFd);
// 将STDOUT_FILENO复制到fd后,fd并没有发生变化,依然可以通过它写入到a.txt中
const char *pStr = "write string through fd\n";
write(fd, pStr, strlen(pStr));
fileFd = dup2(nfd, fileFd);
if (fileFd 0)
{
printf("dup2 reback stdout_fileno failed\n");
return -1;
}
printf("print back to stdout standard, fileFd = %d\n", fileFd);
// 上面使用dup2的时候,STDOUT_FILENO是存在并打开的,我们来测试下不存在的文件描述符的情况
fileFd = dup2(fd, 20);
if (fileFd 0)
{
printf("dup2不存在的文件描述符失败, fileFd = %d\n", fileFd);
}
else
{
printf("dup2不存在的文件描述符成功, fileFd = %d\n", fileFd);
const char *pStr = "write string through fileFd\n";
write(fileFd, pStr, strlen(pStr));
}
close(nfd);
close(fileFd);
return 0;
}
文件指针是关键,标志两个文件描述符是否一致,看文件指针是否一致即可 ,如果两个或者多个文件描述符指向同一个文件表,那么对他们的操作是对同一个文件进行操作
dup命令linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于dump linux、dup命令linux的信息别忘了在本站进行查找喔。








