IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育


exit()和_exit()函數

分享到:
           

    1)exit()和_exit()函數說明

    exit()和_exit()函數都是用來終止進程的。當程序執行到exit()或_exit()時,進程會無條件地停止剩下的所有操作,清除各種數據結構,并終止本進程的運行。但是,這兩個函數還是有區別的,其調用過程如圖1所示。


圖1 exit()和_exit()函數流程圖

    從圖1中可以看出,_exit()函數的作用是:直接使進程停止運行,清除其使用的內存空間,并清除其在內核中的各種數據結構;exit()函數則在這些基礎上做了一些包裝,在執行退出之前加了若干道工序。exit()函數與_exit()函數大的區別就在于exit()函數在終止當前進程之前要檢查該進程打開過哪些文件,把文件緩沖區中的內容寫回文件,也就是圖3.5中的“清理I/O緩沖”一項。

    由于在Linux的標準函數庫中,有一種被稱做“緩沖I/O(buffered I/O)”的操作,其特征就是對應每一個打開的文件,在內存中都有一片緩沖區。

    每次讀文件時,會連續讀出若干條記錄,這樣在下次讀文件時就可以直接從內存的緩沖區中讀取;同樣,每次寫文件時,也僅僅是寫入內存中的緩沖區,等滿足了一定的條件(如達到一定數量或遇到特定字符等),再將緩沖區中的內容一次性寫入文件。

    這種技術大大增加了文件讀寫的速度,但也為編程帶來了一些麻煩。比如有些數據認為已經被寫入到文件中,實際上因為沒有滿足特定的條件,它們還只是被保存在緩沖區內,這時用_exit()函數直接將進程關閉掉,緩沖區中的數據就會丟失。因此,若想保證數據的完整性,好使用exit()函數。

    2)exit()和_exit()函數語法

    表1列出了exit()和_exit()函數的語法要點。

表1 exit()和_exit()函數語法要點

所需頭文件 exit:#include <stdlib.h>
_exit:#include <unistd.h>
函數原型 exit:void exit(int status)
_exit:void _exit(int status)
函數傳入值 status是一個整型的參數,可以利用這個參數傳遞進程結束時的狀態。一般來說,0表示正常結束;其他的數值表示出現了錯誤,進程非正常結束。
在實際編程時,可以用wait()系統調用接收子進程的返回值,針對不同的情況進行不同的處理

    3)exit()和_exit()使用實例

    以下兩個示例比較了exit()和_exit()函數的區別。由于printf()函數使用的是緩沖I/O方式,該函數在遇到“\n”換行符時自動從緩沖區中將記錄讀出。以下示例中就是利用這個性質來進行比較的。示例1的代碼如下:

    /* exit.c */
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        printf("Using exit...\n");
        printf("This is the content in buffer");
        exit(0);
    }
    $ ./exit
    Using exit...
    This is the content in buffer $

    讀者從輸出的結果中可以看到,調用exit()函數時,緩沖區中的記錄也能正常輸出。

    示例2的代碼如下:

    /* _exit.c */
    #include <stdio.h>
    #include <unistd.h>

    int main()
    {
        printf("Using _exit...\n");
        printf("This is the content in buffer"); /* 加上回車符之后結果又如何 */
        _exit(0);
    }
    $ ./_exit
    Using _exit...
    $

    讀者從后的結果中可以看到,調用_exit()函數無法輸出緩沖區中的記錄。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接:

   1、Linux下多進程編程之exec函數語法及使用實例
   2、Linux下多進程編程之fork()函數語法
   3、Linux下多進程編程之fork()函數說明
   4、Linux下多任務系統之線程介紹
   5、Linux下進程的內存結構

更多新聞>> 

主站蜘蛛池模板: 江苏广分检测技术有限公司、电力安全工具检测、苏州绝缘工具检测、昆山电力安全工具检测-广分检测技术(苏州)有限公司 | 专业无机盐,化工产品检测公司,水处理剂检测公司,第三方水质检测机构—准诺检测 | 消防服_防化服_灭火防护服_消防装备生产厂家-泰州市华通消防装备厂有限公司 | 小型环境空气质量连续监测系统-烟气排放连续监测仪(碳排放)-青岛明德环保仪器有限公司 | 名嘉宴会【官网】_宁波冷餐_宁波茶歇_宁波酒会_宁波自助餐_宁波盛世名嘉宴会服务有限公司 | 模具|晒纹-咬花-拉丝纹-立体纹-东莞市佳毅激光科技有限公司 | 苏州温测仪器有限公司-苏州炉温跟踪仪|苏州隔热箱|苏州炉温测试仪|苏州恒温恒湿箱 | 注塑机螺杆_光学无卤耐磨耐腐蚀螺杆_合金材料_螺杆研磨抛光机_杰宇螺杆 | 深圳市大业激光成型技术有限公司 | 深圳中安视讯科技发展有限公司 - 深圳中安视讯科技发展有限公司 深圳展厅设计_产业园区展馆设计_展馆设计公司_健康产业展馆设计_展厅设计哪家好_华竣国际 | 上海眼科医院_上海希玛瑞视眼科医院【上海医保定点单位】 | 全开式真空干燥机_全开耙式真空干燥机_全开式动态真空干燥机,江阴千峰机械制造有限公司 | 箱式污泥采样器-全自动旋转振荡器-恒温石墨电热板-常州亿通分析仪器制造有限公司 | 盆底肌修复仪器-产后康复脉冲磁训练仪-南京佳澜健康管理有限公司 | 酒店宾馆一次性用品厂家-酒店洗漱用品,洗浴用品品牌方案-江苏欧佩 | 威海华东数控股份有限公司 | 销售系统_营销系统_自动营销软件_b2b营销系统_数字营销平台_AI销售 | 印刷公司,北京印刷厂,宣传画册手册印刷厂-和智印彩页设计 | 中科联航(江苏)-信息化监理|信息化咨询|信息系统项目管理|信息系统工程监理公司 | 装盒机_全自动装盒机-温州凯祥包装机械有限公司 | 全球石油化工网 - 石油化工资讯,石油化工机械,石油化工设备,石油化工贸易,石油化工技术,尽在石油化工网 | 廊坊金星化工有限公司-钢套钢保温管厂家,玻璃钢缠绕保温管,镀锌铁皮保温管厂家,廊坊金星化工有限公司 | 邛崃人才网_邛崃招聘网_求职找工作平台| 酒博会丨京酒展丨北京国际酒业博览会 | 化妆粉扑厂家【秀兰】一线品牌资格供应商_海绵粉扑批发_气垫粉扑价格_广州秀兰生物科技有限公司 化工招聘网 化工人才网|化工英才网-化工企业招聘首选网站 | 整体滤板模板-S型塑料滤砖-MBBR生物悬浮球填料-微孔曝气器-大恒环保科技 | 助乐邦轮椅,北京轮椅置换,电动轮椅置换,轮椅回收北京,轮椅送货上门服务 | 湖北高新技术企业认定申报|武汉高企认定代办|武汉项目申报首选 - 湖北创优企科技服务有限公司 | 专题秀_汇聚网络热门专题_实时报道各类新闻专题资讯 | 四方光电(武汉)仪器有限公司_四方仪器首页-烟气分析仪|尾气分析仪|煤气分析仪|沼气分析仪|天然气分析仪|超声波流量计|在线气体分析系统|红外气体传感器 | 智能电地暖_电地暖安装_电地暖价格-西安秦星暖通工程有限公司 | 面粉加工设备-面粉加工机械-面粉机组-面粉磨粉机-面粉机成套设备-河南粮院机械制造有限公司 | 宿迁市华泰交通设施有限公司,上海第四代路名牌,天津仿罗马柱路名牌,标准路名牌,路名牌灯箱,公交站台,户外广告灯箱, 交通标志牌,社区阅报栏 | 日本国际高中学校招生【立学仕日本留学服务】日语中学学校|美术生|艺术生|高中生|本科|研究生|语言学校留学择校申请 | 泰州光明会计师事务所有限公司-财务业务审计,会计服务业务及资产评估业务的专业服务机构 | 合肥年会策划-合肥开业庆典公司-合肥会务活动礼仪公司-合肥展台搭建/音响租赁公司 [七色海] | 中科联航(江苏)-信息化监理|信息化咨询|信息系统项目管理|信息系统工程监理公司 | 铜陵耐火砖|铜陵耐火浇注料|铜陵耐火材料|铜陵市金钟物资经营部【官网】 | 长春互联网运营值选星广传媒,长春短视频运营,长春新媒体运营,长春互联网运营,长春抖音运营,吉林视频号代运营,吉林快手代运营,短视频推广公司,公众号运营,微博运营,新媒体运营 | 西安真石漆_无机涂料厂家_无机涂料多少钱一个平方—陕西秦森环保科技有限公司 | 四川蜀易控科技有限公司-酒店客房控制系统-智慧酒店智能化客房控制系统生产厂家 |