chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-09-08 13:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

應用程序開發(fā)方式

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

1、什么是系統調用?

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

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

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

2、C庫函數

C標準庫頭文件如下:

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

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

實例:文件操作

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

(圖片來源:野火Linux開發(fā)實戰(zhàn)指南)

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

1、文件操作:系統調用

(1)實操

代碼:

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

/*文件操作:系統調用*/ #include #include #include #include #include intmain(void) { intfd;/*文件描述符*/ charrd_buf[50]={0};/*讀數據buf*/ /*以讀寫的方式打開文件demo0_test,若文件不存在則創(chuàng)建文件*/ 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:要打開或創(chuàng)建的文件名;

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

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

read函數:

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

? buf:指向數據緩沖區(qū)的指針;

? count:讀取多少個字節(jié)的數據。

write函數:

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

? buf:指向數據緩沖區(qū)的指針;

? count:往文件中寫入多少個字節(jié)。

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,若文件不存在則創(chuàng)建文件*/ fp=fopen("demo1_test","w+"); if(NULL==fp) { printf("Openfileerror! "); return0; } /*往文件中寫數據*/ fwrite("helloworld ",1,strlen("hellloworld "),fp); /*同步緩沖區(qū):把緩沖區(qū)數據立即寫入文件*/ fflush(fp); /*移動文件指針至文件開頭*/ fseek(fp,0,SEEK_SET); /*讀出文件數據并打印*/ fread(rd_buf,50,1,fp); printf("Readdata:%s ",rd_buf); /*關閉文件*/ fclose(fp); return0; }

運行結果:

(2)接口說明

fopen函數:

? pathname 參數用于指定要打開或創(chuàng)建的文件名。

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

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

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

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

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

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

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

? fopen 的返回值是 FILE 類型的文件文件流,當它的值不為 NULL 時表示正常,后續(xù)的 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 是以當前位置為參考點的相對位置。

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

    關注

    33

    文章

    9005

    瀏覽量

    153761
  • Linux
    +關注

    關注

    87

    文章

    11511

    瀏覽量

    213827
  • 庫函數
    +關注

    關注

    0

    文章

    177

    瀏覽量

    34426

原文標題:Linux下應用開發(fā)基礎

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    linux應用程序開發(fā)linux系統移植

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

    如何去實現嵌入式Linux應用程序開發(fā)

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

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

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

    LinuxC應用程序開發(fā)

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

    基于嵌入式Linux應用程序開發(fā)詳解

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

    兩種開發(fā) RFID 應用程序的方法分析

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

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

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

    如何使用Xilinx SDK創(chuàng)建Linux應用程序,并進行開發(fā)和調試

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

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

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

    讀寫分離的兩種實現方式

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

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

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

    如何使用linuxgdb調試python程序

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

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

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

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

    眾所周知,linux下一切皆文件,那么應用層如何控制硬件層,同樣是通過 文件I/O的方式實現的,那么應用層控制硬件層通常有兩種方式。
    的頭像 發(fā)表于 10-05 19:03 ?1346次閱讀
    <b class='flag-5'>Linux</b>應用層控制外設的<b class='flag-5'>兩種</b>不同的方式