当前位置:首页 » 操作系统 » linuxdup2

linuxdup2

发布时间: 2022-04-06 23:01:36

linux文件重定向问题

应该是缓冲区造成的。printf是带缓冲的。
就算25行输出一个\n,也能写到文件中。
但是如果25行什么都不做,那么就写不到文件中。
反正我也觉得很有点奇怪,按理说你重定向之后,标准输出应该指向文件的,可是并没有。
至于这个问题,我也没有弄得特别明白,不过我建议你在写文件的时候,不要使用带缓冲的,最好使用write和read来写文件,这些都是不带缓冲的。

❷ linux下重定向前后printf的输出缓存机制怎么变化

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
fflush(stdout);
setvbuf(stdout,NULL,_IONBF,0);
printf("test stdout\n");
int save_fd = p(STDOUT_FILENO); // 保存标准输出 文件描述符 注:这里一定要用 p 复制一个文件描述符. 不要用 = 就像是Winodws下的句柄.
int fd = open("test1.txt",(O_RDWR | O_CREAT), 0644);
p2(fd,STDOUT_FILENO); // 用我们新打开的文件描述符替换掉 标准输出
printf("test file\n");

//再恢复回来标准输出. 两种方式
//方法1 有保存 标准输出的情况
//p2(save_fd,STDOUT_FILENO);

//方法2 没有保存 标准输出的情况
int ttyfd = open("/dev/tty",(O_RDWR), 0644);
p2(ttyfd,STDOUT_FILENO);
printf("test tty\n");
}

❸ linux 守护进程 标准输出 标准错误输出 重定向到文件中

启动程序的时候直接重定向,./xxx >>/a/a/a/a &

❹ 在linux下编c,p2(fd, 1) 或 p2(fd, 0)中0和1是什么意思

硬盘的意思,0 是NO.1 1是第二块

❺ linux重定向的进阶IO

>&n 使用系统调用 p2复制文件描述符 n 并把结果用作标准输出;
<&n 标准输入复制自文件描述符 n;
<&- 关闭标准输入(键盘);
>&- 关闭标准输出;
n<&- 表示将 n 号输入关闭;
n>&- 表示将 n 号输出关闭;
上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的 0 或 1。如:
... 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。
... 2>&1 运行一个命令并把它的标准输出和输出合并。(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流。)
我 们对 2>&1详细说明一下 :2>&1 也就是 FD2=FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 > 是改变送出的数据通道,也就是说把 FD2 的 “数据输出通道” 改为 FD1 的 “数据输出通道”。如果仅仅这样,这个改变好像没有什么作用,因为 FD2 的默认输出和 FD1的默认输出本来都是 monitor,一样的! 但是,当 FD1 是其他文件,甚至是其他 FD 时,这个就具有特殊的用途了。请大家务必理解这一点。
exec 1>outfilename # 打开文件outfilename作为stdout。
exec 2>errfilename # 打开文件 errfilename作为 stderr。
exec 0<&- # 关闭 FD0。
exec 1>&- # 关闭 FD1。
exec 5>&- # 关闭 FD5。

❻ linux的p是复制文件描述字还是代替

其实就是这样:
p()或者p2()主要是将某个特定的文件描述字输出输出的重定向!
他们保证将复制的文件描述字到当前未打开的最小描述字!事例代码int fd;if(argc!=2){err_quit("Usage :filename");}if((fd=creat(argv[1],0644))

❼ LINUX中此程序运行后,为何刷新不出命令提示符

很遗憾,在我的centos6测试系统中,输入你的程序编译运行后,会直接显示命令行提示符,不需要回车一下。

我认为这种情况是由于shell处理子进程的方式不同而引起的,研究这种原因大部分时间不如研究茴香豆的茴字有几种写法有意义。

如过你想找到原因,我认为可以在你的环境里面,逐步的删除你程序中一些不影响结果的行,然后调整运行方式(比如说,不要用close,不要wait等)再试试看吧

❽ linux 下 pipe()与p2 问题

#include<stdio.h>

#include<unistd.h>

intmain()
{
intfd[2];

pipe(fd);

if(fork()==0){
close(fd[0]);
p2(fd[1],STDOUT_FILENO);
close(fd[1]);

printf("Hello");
printf("123");
printf("ooppqq");

}else{
close(fd[1]);
#defineBUFFER_SIZE1024
charbuffer[BUFFER_SIZE];
intreadCount;

while((readCount=read(fd[0],buffer,
BUFFER_SIZE-1))>0){
buffer[readCount]='';
printf(buffer);
}
close(fd[0]);
}

return0;
}

❾ Linux 为什么复制的文件一直增加p后缀

p函数只有一个参数,也就是输入一个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);
p(filedes);
close(filedes);
execlp("ls","-l",(char * )0);
return 0;
}

所以看起来p程序就是要复制一个fd到stdout。是这样的吗,如果我要p到stdout以外的fd怎么办呢?
------解决思路----------------------
p返回的是当前最小可用描述符,你这里会重定向到标准输出是因为你close(1),使标准输出描述符可以被用,所以p返回了1.
如果我要p到stdout以外的fd,使用p2

热点内容
昆特牌外服安卓怎么登录 发布:2024-09-28 07:19:17 浏览:882
在linux下安装win7 发布:2024-09-28 07:14:55 浏览:390
服务器170台电脑配置 发布:2024-09-28 07:09:09 浏览:776
iis设置ftp 发布:2024-09-28 06:39:18 浏览:410
阿里云服务器购买价格 发布:2024-09-28 06:38:37 浏览:621
缓存平台 发布:2024-09-28 06:38:34 浏览:956
分类器python 发布:2024-09-28 06:38:32 浏览:268
编译原理技术与工具 发布:2024-09-28 06:38:32 浏览:393
java抽签 发布:2024-09-28 06:29:27 浏览:911
安卓系统怎么限制软件使用时间 发布:2024-09-28 06:28:31 浏览:555