色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux下開發應用程序的兩種接口來實現

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-09-08 13:52 ? 次閱讀

應用程序開發方式

Linux下開發應用程序可以調用兩種接口來實現,一種是直接調用系統調用接口,另一種是調用庫函數來實現。

1、什么是系統調用?

系統調用(System Call)是操作系統提供的服務,是應用程序與內核通信的接口。

Linux提供的系統調用包含的內容有:文件操作、進程控制、系統控制、內存管理、網絡管理、socket套接字、進程間通信、用戶管理等。

相對于普通的函數調用來說, 系統調用的性能消耗也是巨大的。所以在追求極致性能的程序中, 都在盡力避免系統調用。

2、C庫函數

C標準庫頭文件如下:

Linux環境下, 使用的C庫一般都是glibc, 它封裝了幾乎所有的系統調用, 代碼中使用的“系統調用”, 實際上就是調用C庫中的函數。

因為C庫函數通過系統調用來實現,庫函數對上層提供了C庫接口。比如文件操作:

實例:文件操作

Linux下文件操作應用程序結構如下:

(圖片來源:野火Linux開發實戰指南)

Linux下,“一切皆文件”。為了使不同的文件系統共存, Linux 內核在用戶層與具體文件系統之前增加了虛擬文件系統(VFS)中間層,它對復雜的系統進行抽象化,對用戶提供了統一的文件操作接口。

1、文件操作:系統調用

(1)實操

代碼:

左右滑動查看全部代碼>>>

/*文件操作:系統調用*/ #include #include #include #include #include intmain(void) { intfd;/*文件描述符*/ charrd_buf[50]={0};/*讀數據buf*/ /*以讀寫的方式打開文件demo0_test,若文件不存在則創建文件*/ fd=open("demo0_test",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU); if(NULL==fd) { printf("Openfileerror! "); return0; } /*往文件中寫數據*/ write(fd,"hellloworld ",strlen("hellloworld ")); /*移動文件指針至文件開頭*/ lseek(fd,0,SEEK_SET); /*讀出文件數據并打印*/ read(fd,rd_buf,50); printf("Readdata:%s ",rd_buf); /*關閉文件*/ close(fd); return0; }

運行結果:

(2)接口說明

open函數:

? pathname:要打開或創建的文件名;

? flag:指定文件的打開方式,具體有以下參數,見下表 flag 參數值。

? mode:當 open 函數的 flag 值設置為 O_CREAT 時,必須使用 mode 參數來設置文件與用戶相關的權限。mode 可用的權限如下表所示,表中各個參數可使用” | “來組合。

read函數:

? fd:文件對應的文件描述符 ;

? buf:指向數據緩沖區的指針;

? count:讀取多少個字節的數據。

write函數:

? fd:文件對應的文件描述符;

? buf:指向數據緩沖區的指針;

? count:往文件中寫入多少個字節。

close函數:

關閉 fd 文件描述符對應的文件。

lseek 函數:

lseek 函數可以用與設置文件指針的位置,并返回文件指針相對于文件頭的位置。其中的 offset 參數用于指定位置, whence 參數則定義了 offset 的意義, whence 的可取值如下:

? SEEK_SET:offset 是一個絕對位置。

? SEEK_END:offset 是以文件尾為參考點的相對位置。

? SEEK_CUR:offset 是以當前位置為參考點的相對位置。

2、文件操作:C庫函數

(1)實操

代碼:

左右滑動查看全部代碼>>>

/*文件操作:c庫函數*/ #include #include intmain(void) { FILE*fp;/*文件描述符*/ charrd_buf[50]={0};/*讀數據buf*/ /*以讀寫的方式打開文件demo1_test,若文件不存在則創建文件*/ fp=fopen("demo1_test","w+"); if(NULL==fp) { printf("Openfileerror! "); return0; } /*往文件中寫數據*/ fwrite("helloworld ",1,strlen("hellloworld "),fp); /*同步緩沖區:把緩沖區數據立即寫入文件*/ fflush(fp); /*移動文件指針至文件開頭*/ fseek(fp,0,SEEK_SET); /*讀出文件數據并打印*/ fread(rd_buf,50,1,fp); printf("Readdata:%s ",rd_buf); /*關閉文件*/ fclose(fp); return0; }

運行結果:

(2)接口說明

fopen函數:

? pathname 參數用于指定要打開或創建的文件名。

? mode 參數用于指定文件的打開方式,注意該參數是一個字符串,輸入時需要帶雙引號:

?“r”:以只讀方式打開,文件指針位于文件的開頭。

?“r+”:以讀和寫的方式打開,文件指針位于文件的開頭。

?“w”:以寫的方式打開,不管原文件是否有內容都把原內容清空掉,文件指針位于文件的開頭。

?“w+”:同上,不過當文件不存在時,前面的” w”模式會返回錯誤,而此處的” w+”則會創建新文件。

?“a”:以追加內容的方式打開,若文件不存在會創建新文件,文件指針位于文件的末尾。與” w+”的區別是它不會清空原文件的內容而是追加。

?“a+”:以讀和追加的方式打開,其它同上。

? fopen 的返回值是 FILE 類型的文件文件流,當它的值不為 NULL 時表示正常,后續的 fread、 fwrite等函數可通過文件流訪問對應的文件。

fopen 的 mode 與 open 的 flags 參數關系:

fread 函數:

stream 是使用 fopen 打開的文件流, fread 通過它指定要訪問的文件,它從該文件中讀取 nmemb 項數據,每項的大小為 size,讀取到的數據會被存儲在 ptr 指向的數組中。fread 的返回值為成功讀取的項數(項的單位為 size)。

fwrite 函數:

它的操作與 fread 相反,把 ptr 數組中的內容寫入到 stream 文件流,寫入的項數為 nmemb,每項大小為size,返回值為成功寫入的項數(項的單位為 size)。

fclose 函數:

fclose 庫函數用于關閉指定的文件流,關閉時它會把尚未寫到文件的內容都寫出。因為標準庫會對數據進行緩沖,所以需要使用 fclose 來確保數據被寫出。

fflush 函數:

fflush 函數用于把尚未寫到文件的內容立即寫出。常用于確保前面操作的數據被寫入到磁盤上。fclose 函數本身也包含了 fflush 的操作。

fseek 函數:

其中的 offset 參數用于指定位置, whence 參數則定義了 offset 的意義, whence 的可取值如下:

? SEEK_SET:offset 是一個絕對位置。

? SEEK_END:offset 是以文件尾為參考點的相對位置。

? SEEK_CUR:offset 是以當前位置為參考點的相對位置。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8611

    瀏覽量

    151234
  • Linux
    +關注

    關注

    87

    文章

    11310

    瀏覽量

    209597
  • 庫函數
    +關注

    關注

    0

    文章

    177

    瀏覽量

    33981

原文標題:Linux下應用開發基礎

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux實現輸入參數求和的兩種方式

    Linux實現輸入參數求和(兩種方式)
    發表于 03-26 11:44

    linux應用程序開發linux系統移植

    ,kernel移植,rootfs制作)5.linux驅動開發從事嵌入式應具備的能力  嵌入式開發本身也有高下之分,至少包含嵌入式應用程序工程師和底層的驅動內核工程師
    發表于 12-20 08:19

    如何去實現嵌入式Linux應用程序開發

    如何去實現嵌入式Linux應用程序開發呢?如何去實現在ARM
    發表于 12-27 06:53

    嵌入式Linux NFS方式應用程序實現

    嵌入式Linux NFS方式應用程序實現:本文在以ARM9 內核芯片,處理器為S3C2410 構造的開發板系統上,詳細討論了如何配置嵌入
    發表于 08-02 14:48 ?39次下載

    LinuxC應用程序開發

    本文介紹了在 Linux能用于 C 應用程序開發和調試的工具. 本文的主旨是介紹如何在 Linux
    發表于 05-14 10:16 ?4686次閱讀

    基于嵌入式Linux應用程序開發詳解

    基于嵌入式Linux應用程序開發詳解
    發表于 10-25 14:17 ?12次下載
    基于嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>應用程序</b><b class='flag-5'>開發</b>詳解

    兩種開發 RFID 應用程序的方法分析

    在本文中,我將首先討論兩種開發 RFID 應用程序的方法:傳統方法和 RFID Web服務。然后,我將 討論把 RFID Web服務集成到多個 SOA 中的 EAI 應用程序將如何提高
    發表于 12-07 04:09 ?842次閱讀

    基于Linux兩種分層存儲實現方案

    ,如何在 Linux 主機上,使用 Linux 現有的機制,實現數據的分層存儲?本文主要介紹了 Linux 平臺上兩種不同的
    發表于 06-04 06:24 ?2973次閱讀
    基于<b class='flag-5'>Linux</b> 的<b class='flag-5'>兩種</b>分層存儲<b class='flag-5'>實現</b>方案

    如何使用Xilinx SDK創建Linux應用程序,并進行開發和調試

    了解如何使用Xilinx SDK創建Linux應用程序。 我們還將重點介紹和演示支持Linux應用程序開發和調試的不同方面的SDK功能。
    的頭像 發表于 11-20 07:03 ?1.1w次閱讀

    基于RTLinux實時應用程序開發模式實現通信接口的設計和使用方式

    和線程信號驅動機制,三者的應用重點各不相同。其中前兩種較為常用。由于不的實現機理,這兩種接口的應用范疇各有側重。經過實踐,認為將以上兩種
    的頭像 發表于 10-04 18:00 ?2889次閱讀
    基于RTLinux實時<b class='flag-5'>應用程序</b><b class='flag-5'>開發</b>模式<b class='flag-5'>實現</b>通信<b class='flag-5'>接口</b>的設計和使用方式

    讀寫分離的兩種實現方式

    1. 引言 讀寫分離要做的事情就是對于一條SQL該選擇哪個數據庫去執行,至于誰來做選擇數據庫這件事兒,無非個,要么中間件幫我們做,要么程序自己做。因此,一般來講,讀寫分離有兩種實現
    的頭像 發表于 09-29 14:51 ?1.3w次閱讀

    嵌入式Linux應用程序開發-(9)UDP網絡通信應用程序(UDP-Socket)

    基于UDP協議的網絡通信應用程序(UDP-Socket)前篇文章介紹了基于TCP/IP協議的網絡通信應用程序。嵌入式Linux應用程序
    發表于 11-02 12:21 ?35次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>應用程序</b><b class='flag-5'>開發</b>-(9)UDP網絡通信<b class='flag-5'>應用程序</b>(UDP-Socket)

    如何使用linuxgdb調試python程序

    如何使用linuxgdb調試python程序? 在Linux,可以使用GDB(GNU調試器
    的頭像 發表于 01-31 10:41 ?2636次閱讀

    linux驅動程序的編譯方法有哪兩種

    Linux驅動程序的編譯方法主要可以歸納為兩種: 手動編譯 和 使用內核構建系統(Makefile)自動編譯 。 1. 手動編譯 手動編譯驅動程序通常涉及直接使用GCC(GNU Com
    的頭像 發表于 08-30 14:39 ?714次閱讀

    Linux應用層控制外設的兩種不同的方式

    眾所周知,linux下一切皆文件,那么應用層如何控制硬件層,同樣是通過 文件I/O的方式實現的,那么應用層控制硬件層通常有兩種方式。
    的頭像 發表于 10-05 19:03 ?537次閱讀
    <b class='flag-5'>Linux</b>應用層控制外設的<b class='flag-5'>兩種</b>不同的方式
    主站蜘蛛池模板: 青青草干免费线观看| 在线观看国产高清免费不卡| 日韩精品a在线视频| 亚洲精品国产拍在线观看| 超碰在线公开视频| 美女厕所撒尿ass| 亚洲无AV在线中文字幕| 高潮久久久久久久久不卡| 女人十八毛片水真多啊| 再插深点嗯好大好爽| 女子初尝黑人巨嗷嗷叫| 国产AV精品白浆一区二| 日本激情在线| z00兽200俄罗斯| 欧美另类与牲交ZOZOZO| 999久久免费高清热精品| 久久操韩国自偷拍| 亚洲国产成人精品无码区APP| 叮当成人社区| 四虎永久在线精品国产| 电影日本妻子| 亚洲中文字幕AV在天堂| 黄色网址在线免费观看| 亚洲AV国产精品无码精| 国产第81页| 色综合a在线| 国产av在在免费线观看美女| 亚洲免费久久| 花蝴蝶在线观看免费8| 99热6精品视频6| 秋霞久久久久久一区二区| 国产一级特黄a大片99| 小学生偷拍妈妈视频遭性教育| 艳妇臀荡乳欲伦岳TXT下载| 强奸日本美女小游戏| 黄色小说男男| 国产成人啪精视频精东传媒网站| 无人区国产片| 精品一区二区免费视频蜜桃网 | 欧美特级特黄AAAAA片| beeg日本老师按摩|