當前位置:首頁 » 操作系統 » 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-11-14 20:31:23 瀏覽:340
安卓和蘋果系統哪個好哪個不卡頓 發布:2024-11-14 20:24:58 瀏覽:472
jetty文件上傳 發布:2024-11-14 20:23:58 瀏覽:863
彩色解壓泥 發布:2024-11-14 20:16:33 瀏覽:341
蘋果手機怎麼打開配置 發布:2024-11-14 20:14:09 瀏覽:128
php自動壓縮 發布:2024-11-14 20:03:48 瀏覽:15
northwind資料庫 發布:2024-11-14 19:46:37 瀏覽:502
解壓感悟 發布:2024-11-14 19:40:25 瀏覽:448
pdomysqlphp 發布:2024-11-14 19:23:25 瀏覽:966
entityframework緩存 發布:2024-11-14 19:19:14 瀏覽:129