【Linux C】簡單bash設計

主要功能

    循環提示用戶輸入命令(minibash$)。創建子進程(fork())執行命令(execlp)。父進程等待子進程結束(waitpid)。

關鍵問題

    參數處理缺失:scanf("%s", buf) 遇到空格會截斷輸入,無法執行帶參數的命令(如 ls -l)。execlp 調用錯誤:execlp(buf, 0) 的參數列表不正確,導致命令參數未傳遞。正確形式應為 execlp(buf, buf, (char *)NULL)。緩沖區溢出風險:未限制輸入長度,可能導致 buf 溢出。無退出機制:用戶無法通過命令退出程序,只能強制終止。

執行流程

    父進程讀取輸入 → 創建子進程 → 子進程執行命令 → 父進程等待 → 循環繼續。

Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>int main() {char buf[1024];pid_t pid;while (1) {printf("minibash$ ");if (fgets(buf, sizeof(buf), stdin) == NULL) {break; // 處理EOF}buf[strcspn(buf, "\n")] = '\0'; // 去除換行符if (strcmp(buf, "exit") == 0) {break; // 退出命令}pid = fork();if (pid == 0) {// 子進程:解析參數并執行命令char *args[64];int i = 0;args[i] = strtok(buf, " ");while (args[i] != NULL && i < 63) {args[++i] = strtok(NULL, " ");}args[i] = NULL;execvp(args[0], args);perror("execvp error");exit(1);} else if (pid > 0) {// 父進程:等待子進程int status;waitpid(pid, &status, 0);if (WIFEXITED(status)) {printf("Child exited with status %d\n", WEXITSTATUS(status));}} else {perror("fork error");}}return 0;
}

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

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

相關文章

【vue】基礎

一、vi-if 1.1基本使用 必須綁定大盒子包住的代碼&#xff0c;使用id或者class都可以進行綁定 new Vue({ el:"#id" el:".class" }) 1.2v-if和v-show的區別 v-show會渲染&#xff0c;但是不顯示&#xff0c;v-if不渲染不顯示 1.3vue實例的作用范圍 必須包…

【數據結構_5】鏈表(模擬實現以及leetcode上鏈表相關的題目)

書接上文&#xff0c;繼續編寫鏈表的功能 4.鏈表的中間插入 在鏈表中&#xff0c;本身是沒有下標這樣的概念的&#xff0c;不像順序表&#xff0c;順序表根據下標訪問元素&#xff0c;O(1)復雜度。鏈表需要遍歷之后找到正確的位置才能進行插入&#xff0c;為O&#xff08;N&a…

C語言的發展史

一、起源 C語言的起源可以追溯到20世紀60年代末期。其前身是BCPL&#xff08;Basic Combined Programming Language&#xff09;語言&#xff0c;由劍橋大學的Martin Richards于1967年在CPL語言的基礎上簡化而來。1970年&#xff0c;美國貝爾實驗室的Ken Thompson以BCPL語言為…

深入解析棧式虛擬機與反向波蘭表示法

1.1 什么是虛擬機&#xff1f; 虛擬機&#xff08;Virtual Machine, VM&#xff09;是一種軟件實現的計算機系統&#xff0c;提供與物理計算機相類似的環境&#xff0c;但在軟件層面運行。虛擬機的存在簡化了跨平臺兼容性、資源管理以及安全隔離等問題。 1.2 棧式虛擬機的架構…

ubuntu 系統安裝Mysql

安裝 mysql sudo apt update sudo apt install mysql-server 啟動服務 sudo systemctl start mysql 設置為開機自啟 sudo systemctl enable mysql 查看服務狀態 &#xff08;看到類似“active (running)”的狀態信息代表成功&#xff09; sudo systemctl status mysql …

《前端面試題之 CSS篇(第一集)》

目錄 1、CSS的盒模型2、CSS選擇器及其優先級3、隱藏元素的方法有那些4、px、em、rem的區別及使用場景5、重排、重繪有什么區別6、水平垂直居中的實現7、CSS中可繼承與不可繼承屬性有哪些8、Sass、Less 是什么&#xff1f;為什么要使用他們&#xff1f;9、CSS預處理器/后處理器是…

HTTP:四.HTTP連接

HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本數據的應用層協議。它是互聯網上最常用的協議,用于在客戶端和服務器之間傳輸數據。HTTP協議通常用于從Web服務器傳輸網頁和文件到客戶端瀏覽器,并支持其他用途,如傳輸API數據和傳輸文件。 HTTP連接是指客戶端向服務…

opencv 識別運動物體

import cv2 import numpy as npcap cv2.VideoCapture(video.mp4) try:import cv2backSub cv2.createBackgroundSubtractorMOG2() except AttributeError:backSub cv2.bgsegm.createBackgroundSubtractorMOG()#形態學kernel kernel cv2.getStructuringElement(cv2.MORPH_REC…

要查看 ??指定 Pod 的資源限制(CPU/內存)

要查看 指定 Pod 的資源限制&#xff08;CPU/內存&#xff09;&#xff0c;可以通過以下 kubectl 命令實現&#xff1a; 1. 快速查看某個 Pod 的資源限制 kubectl get pod <pod-name> -o jsonpath{.spec.containers[*].resources} | jq輸出示例&#xff1a; {"lim…

信息安全管理與評估廣東省2023省賽正式賽題

任務1&#xff1a;網絡平臺搭建(60分) 題號 網絡需求 1 根據網絡拓撲圖所示&#xff0c;按照IP地址參數表&#xff0c;對DCFW的名稱、各接口IP地址進行配置。&#xff08;10分&#xff09; 2 根據網絡拓撲圖所示&#xff0c;按照IP地址參數表&#xff0c;對DCRS的名稱進…

IBM Rational Software Architect安裝感受及使用初體驗

1 安裝感受 最近準備用UML 2.0繪制模型圖。在讀UML創始人之一Grady Booch寫的書《Object-Oriented Analysis and Design with Applications》&#xff08;第3版&#xff09;1時&#xff0c;發現書中用的UML工具之一為IBM Rational Software Architect&#xff08;RSA&#xff…

接聽電話,手機靠近耳朵后拿開,掛斷電話,設備自動鎖屏

目錄 一、問題分析/需求分析 二、解決方案 一、問題分析/需求分析 先說一下大致流程: 首先是打電話過程會啟動PROXIMITY(接近光傳感器)用于監聽手機是否到耳邊,當手機到耳邊時進行滅屏處理,滅屏過程中會調用到鎖屏,所以最終會導致鎖屏 詳細流程分析: 首先根據日志看…

21天Python計劃:零障礙學語法(更新完畢)

目錄 序號標題鏈接day1Python下載和開發工具介紹https://blog.csdn.net/XiaoRungen/article/details/146583769?spm1001.2014.3001.5501day2數據類型、字符編碼、文件處理https://blog.csdn.net/XiaoRungen/article/details/146603325?spm1011.2415.3001.5331day3基礎語法與…

Honor of Kings (S39) 13-win streak

Honor of Kings (S39) 13-win streak S39賽季13連勝&#xff0c;莊周&#xff0c;廉頗硬輔助&#xff0c;對面有回血就先出紅蓮斗盆&#xff0c;有遇到馬克沒帶凈化的&#xff0c;出【冰霜沖擊】破他大招 S39&#xff0c;莊周廉頗前排硬輔助全肉全堆血13連勝_嗶哩嗶哩bilibi…

AI技術實戰:從零搭建圖像分類系統全流程詳解

AI技術實戰&#xff1a;從零搭建圖像分類系統全流程詳解 人工智能學習 https://www.captainbed.cn/ccc 前言 本文將以圖像分類任務為切入點&#xff0c;手把手教你完成AI模型從數據準備到工業部署的全鏈路開發。通過一個完整的Kaggle貓狗分類項目&#xff08;代碼兼容PyTorch…

NIPS2024論文 End-to-End Ontology Learning with Large Language Models

文章所謂的端到端本體學習&#xff0c;指的是從輸入到目標本體這個完整過程。在很多其他文章中&#xff0c;是把本體學習這個任務肢解了來做的&#xff0c;同樣也是肢解了之后評估。 文章號稱的貢獻&#xff0c;不但對通用本體學習提供所謂的baseline&#xff0c;而且還給出了驗…

【NLP】18. Encoder 和 Decoder

1. Encoder 和 Decoder 概述 在序列到序列&#xff08;sequence-to-sequence&#xff0c;簡稱 seq2seq&#xff09;的模型中&#xff0c;整個系統通常分為兩大部分&#xff1a;Encoder&#xff08;編碼器&#xff09;和 Decoder&#xff08;解碼器&#xff09;。 Encoder&…

Deepseek Bart模型相比Bert的優勢

BART&#xff08;Bidirectional and Auto-Regressive Transformers&#xff09;與BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;雖然均基于Transformer架構&#xff0c;但在模型設計、任務適配性和應用場景上存在顯著差異。以下是BART…

在人工智能與計算機技術融合的框架下探索高中教育數字化教學模式的創新路徑

一、引言 1.1 研究背景 在數字中國戰略與《中國教育現代化 2035》的政策導向下&#xff0c;人工智能與計算機技術的深度融合正深刻地重構著教育生態。隨著科技的飛速發展&#xff0c;全球范圍內的高中教育都面臨著培養具備數字化素養人才的緊迫需求&#xff0c;傳統的教學模式…

深度探索 C 語言:指針與內存管理的精妙藝術

C 語言作為一門歷史悠久且功能強大的編程語言&#xff0c;以其高效的性能和靈活的底層控制能力&#xff0c;在計算機科學領域占據著舉足輕重的地位。 指針和內存管理是 C 語言的核心特性&#xff0c;也是其最具挑戰性和魅力的部分。深入理解指針與內存管理&#xff0c;不僅能夠…