進程輸入輸出及終端屬性學習

進程的標準輸入輸出

當主進程fork或exec子進程,文件描述符被繼承,因此0,1,2句柄也被繼承,從而使得telnet等服務,可以做到間接調用別的shell或程序。比如如果是遠程登錄使用的zsh,那么其會重定向到相應的pts

$ ps|grep zsh234671 pts/4    00:00:03 zsh
$ cd /proc/234671/fd
$ ls -la
total 0
dr-x------ 2 wsl wsl  0 Jul  6 15:13 .
dr-xr-xr-x 9 wsl wsl  0 Jul  6 15:13 ..
lrwx------ 1 wsl wsl 64 Jul  6 15:13 0 -> /dev/pts/4
lrwx------ 1 wsl wsl 64 Jul  6 15:13 1 -> /dev/pts/4
lrwx------ 1 wsl wsl 64 Jul  6 15:13 2 -> /dev/pts/4
...

進程在轉為守護進程時,可以經0,1,2句柄重定向到/dev/null,做到不輸出任何信息。

可以使用dump2可以實現重定向功能:
```c
fd = open("./test.txt",O_CREAT|O_RDWR, S_IRWXU );  
dup2(fd, STDOUT_FILENO); //將STDOUT_FILENO文件描述符 指向 fd文件描述符 指向的文件;即將標準輸出 重定向到fd指向的文件‘
//該程序就能將hahahha寫在指定的test.txt文件中了
printf("hahahahaha");
close(fd);

備注:
STDOUT_FILENO、STDIN_FILENO是int型的文件描述符,是非負整數,屬于沒有buffer的I/O;一般定義為0, 1, 2 ,在<unistd.h>定義。

/* Standard file descriptors.  */
#define	STDIN_FILENO	0	/* Standard input.  */
#define	STDOUT_FILENO	1	/* Standard output.  */
#define	STDERR_FILENO	2	/* Standard error output.  */

open()系統函數,返回的是目前未被占用的最小的文件描述符
文件描述符對應的函數是open() read() write() close()等;

stdout stdin stderr 是FILE 類型的文件指針;屬于標準I/O,在<stdio.h>。
所以可以使用:fprintf(stdout, “hahahah”);
fopen()庫函數,返回的是FILE 類型的文件指針
FILE類型的文件指針,對應的函數是 fopen() fgets() fputs() fprintf() fclose() fgetc() fputc()等
可以寫一個信號處理函數,將輸出在不同終端間切換。或者通過重定向標準輸出+無名管道的方式,實現將子進程的輸出用more顯示。

終端屬性

通過終端屬性,可以禁用回顯,

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>int main() {int fd = STDIN_FILENO; // 使用標準輸入作為終端設備的文件描述符// 獲取當前終端屬性struct termios old_attr;if (tcgetattr(fd, &old_attr) == -1) {perror("tcgetattr");exit(EXIT_FAILURE);}// 備份舊的終端屬性struct termios new_attr = old_attr;// 修改終端屬性new_attr.c_lflag &= ~ECHO; // 禁用回顯// 設置新的終端屬性if (tcsetattr(fd, TCSANOW, &new_attr) == -1) {perror("tcsetattr");exit(EXIT_FAILURE);}// 讀取用戶輸入并打印char input[100];printf("Enter your password: ");fgets(input, sizeof(input), stdin);printf("Your password: %s", input);// 恢復之前的終端屬性if (tcsetattr(fd, TCSANOW, &old_attr) == -1) {perror("tcsetattr");exit(EXIT_FAILURE);}return 0;
}

使用stty -echo就能關閉回顯,再使用stty echo打開
使用getty打開一個終端
使用tty查看當前是哪個終端。

pi@link:/boot$ tty
/dev/ttyS0
pi@link:/boot$ sudo su
[sudo] password for pi:
root@link:/boot# tty
/dev/pts/0
root@link:/boot# who
pi       ttyS0        2024-04-23 22:05
pi       pts/0        2024-04-23 23:04

參考
linux 終端設置及讀寫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40769.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

滬上繁花:上海電信的5G-A之躍

2024年6月18日下午&#xff0c;在上海舉行的3GPP RAN第104次會議上&#xff0c;3GPP正式宣布R18標準凍結。R18是無線網絡面向5G-A的第一個版本&#xff0c;其成功凍結正式宣布了5G發展迎來新機遇&#xff0c;5G-A商用已進入全新的發展階段。 在5G-A滾滾而來的時代洪流中&#x…

C#實戰|賬號管理系統:通用登錄窗體的實現。

哈嘍,你好啊,我是雷工! 本節記錄登錄窗體的實現方法,比較有通用性,所有的項目登錄窗體實現基本都是這個實現思路。 一通百通,以下為學習筆記。 01 登錄窗體的邏輯 用戶在登錄窗輸入賬號和密碼,如果輸入賬號和密碼信息正確,點擊【登錄】按鈕,則跳轉顯示主窗體,同時在固…

Vue3項目初始化:

緊接著前面的文章&#xff1a;https://blog.csdn.net/weixin_51416826/article/details/138679863?spm1001.2014.3001.5502 當我們生成一個Vue3項目后必須要增加一些依賴和配置&#xff0c;比如安裝組件庫、配置ESLint和Prettier、接下來咱一步步推進~ 安裝組件庫 一般開發…

【基礎篇】1.7 C語言基礎(一)

一,為什么是C語言? C語言是嵌入式系統開發領域廣泛使用的編程語言。STM32作為一種嵌入式系統的微控制器,需要精確控制硬件資源,那么C語言能夠滿足這一需求。 二,STM32 C語言常用基礎知識 下面是我們在日常STM32開發中必備的C語言基礎要點,掌握這些C語言的基礎知識要點…

llama3

Llama 3是由Meta公司發布的一款大型語言模型&#xff08;LLM&#xff09;&#xff0c;該模型在發布后迅速引起了業界的廣泛關注。以下是對Llama 3的詳細介紹&#xff1a; 一、基本信息 發布單位&#xff1a;Meta公司 發布時間&#xff1a;當地時間2024年4月18日 主要特點&…

上海外貿建站公司wordpress模板推薦

Sora索啦高端制造業wordpress主題 紅色高端制造業wordpress主題&#xff0c;適合外貿企業出海建獨立站的wordpress模板。 https://www.jianzhanpress.com/?p5885 Yamal外貿獨立站wordpress主題 綠色的亞馬爾Yamal外貿獨立站wordpress模板&#xff0c;適用于外貿公司建獨立站…

Redis 中 Set 和 Zset 類型

目錄 1.Set類型 1.1 Set集合 1.2 普通命令 1.3 集合操作 1.4 內部編碼 1.5 使用場景 2.Zset類型 2.1 Zset有序集合 2.2 普通命令 2.3 集合間操作 2.4 內部編碼 2.5 使用場景 1.Set類型 1.1 Set集合 集合類型也是保存多個字符串類型的元素&#xff0c;但是和列表類型不同的是&…

【Go】excelize庫實現excel導入導出封裝(四),導出時自定義某一列或多列的單元格樣式

大家好&#xff0c;這里是符華~ 查看前三篇&#xff1a; 【Go】excelize庫實現excel導入導出封裝&#xff08;一&#xff09;&#xff0c;自定義導出樣式、隔行背景色、自適應行高、動態導出指定列、動態更改表頭 【Go】excelize庫實現excel導入導出封裝&#xff08;二&…

WY-35A4T三相電壓繼電器 導軌安裝 約瑟JOSEF

功能簡述 WY系列電壓繼電器是帶延時功能的數字式交流電壓繼電器。 可用于發電機&#xff0c;變壓器和輸電線的繼電保護裝置中&#xff0c;作為過電壓或欠電壓閉鎖的動作元件 LCD實時顯示當前輸入電壓值 額定輸入電壓Un:100VAC、200VAC、400VAC產品滿足電磁兼容四級標準 產品…

【Rust入門】猜數游戲

文章目錄 前言Rust的變量Rust占位符讀取一行數據到變量里面示例代碼總結 前言 Rust是一種系統編程語言&#xff0c;它專注于速度、內存安全和并行性。學習Rust可以為你的編程技能庫增添新的一筆。在這篇文章中&#xff0c;我們將通過一個簡單的猜數游戲來介紹Rust的基本概念。…

VBA初學:零件成本統計之一(任務匯總)

經過前期一年多對金蝶K3生產任務流程和操作的改造和優化&#xff0c;現在總算可以將零件加工各個環節的成本進行歸集了。 原本想寫存儲過程&#xff0c;通過直接SQL報表做到K3中去的&#xff0c;但財務原本就是用EXCEL&#xff0c;可以方便調整和保存&#xff0c;加上還有一部分…

便攜式氣象站:探索自然的智慧伙伴

在探索自然奧秘、追求科學真理的道路上&#xff0c;氣象數據始終是我們不可或缺的指引。然而&#xff0c;傳統的氣象站往往龐大而笨重&#xff0c;難以在偏遠地區或移動環境中靈活部署。 便攜式氣象站&#xff0c;顧名思義&#xff0c;是一種小巧輕便、易于攜帶和安裝的氣象觀測…

模擬面試002-Java開發工程師+簡歷+問題+回答

模擬面試002-Java開發工程師簡歷問題回答 目錄 模擬面試002-Java開發工程師簡歷問題回答面試簡歷面試官題問Java基礎與編程框架與工具數據庫與性能優化項目經驗與實踐團隊合作與溝通 求職者回答Java基礎與編程框架與工具數據庫與性能優化項目經驗與實踐團隊合作與溝通 參考資料…

由于找不到xinput1 3.dll無法繼續執行重新安裝程序

如果您的計算機提示無法找到xinput1_3.dll文件&#xff0c;這可能表明您的計算機存在問題。在這種情況下&#xff0c;您需要立即對xinput1_3.dll文件進行修復&#xff0c;否則您的某些程序將無法啟動。以下是解決無法找到xinput1_3.dll文件的方法。 一、關于xinput1_3.dll文件的…

你要允許此應用對你的設備進行更改嗎

在Windows 11中&#xff0c;當你看到提示“你要允許此應用對你的設備進行更改嗎&#xff1f;”時&#xff0c;這是系統檢測到某個應用或軟件試圖對你的設備進行更改或安裝的提醒。這個提示是為了保護你的系統免受潛在惡意軟件的侵害。如果你選擇“是”&#xff0c;則應用可以繼…

Elasticsearch 實現 Word、PDF,TXT 文件的全文內容提取與檢索

文章目錄 一、安裝軟件:1.通過docker安裝好Es、kibana安裝kibana:2.安裝原文檢索與分詞插件:之后我們可以通過doc命令查看下載的鏡像以及運行的狀態:二、創建管道pipeline名稱為attachment二、創建索引映射:用于存放上傳文件的信息三、SpringBoot整合對于原文檢索1、導入依賴…

安全及應用(更新)

一、賬號安全 1.1系統帳號清理 #查看/sbin/nologin結尾的文件并統計 [rootrootlocalhost ~]# grep /sbin/nologin$ /etc/passwd |wc -l 40#查看apache登錄的shell [rootrootlocalhost ~]# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改變…

Android增量更新----java版

一、背景 開發過程中&#xff0c;隨著apk包越來越大&#xff0c;全量更新會使得耗時&#xff0c;同時浪費流量&#xff0c;為了節省時間&#xff0c;使用增量更新解決。網上很多文章都不是很清楚&#xff0c;沒有手把手教學&#xff0c;使得很多初學者&#xff0c;摸不著頭腦&a…

2011年的數字IC設計面經

2011年老羅寫的面經&#xff0c;轉眼間2024年了&#xff0c;大家湊合著看吧&#xff0c;可以順便看看2011年的應屆生薪資。 本人通信工程碩士&#xff0c;非電子科班出身&#xff0c;主要找數字IC設計的工作&#xff0c;找工作找了一個月左右&#xff0c;還算滿意吧&#xff0…

邊緣概率密度、條件概率密度、邊緣分布函數、聯合分布函數關系

目錄 二維隨機變量及其分布離散型隨機變量連續型隨機變量邊緣分布邊緣概率密度舉例邊緣概率密度 條件概率密度邊緣概率密度與條件概率密度的區別邊緣概率密度條件概率密度舉個具體例子 參考資料 二維隨機變量及其分布 離散型隨機變量 把所有的概率&#xff0c;都理解成不同質量…