国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Linux打怪升級之路]-文件操作

這篇具有很好參考價值的文章主要介紹了[Linux打怪升級之路]-文件操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器作者:小蝸牛向前沖

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器名言:我可以接受失敗,但我不能接受放棄

如果覺的博主的文章還不錯的話,還請int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器點贊,收藏,關注??支持博主。如果發(fā)現有問題的地方歡迎?大家在評論區(qū)指正。

目錄

一、認識操縱系統(tǒng)下的文件

1、什么是文件

2、文件的類型

3、文件的共識

二、系統(tǒng)級的文件操作接口?

1、文件打開open/文件關閉close

2、其他的文件接口

3、代碼演示文件操作?


本期學習目標:談談對文件的認識,認識操縱系統(tǒng)的文件接口。

一、認識操縱系統(tǒng)下的文件

1、什么是文件

在平常我們對于文件的認識都是在window操縱系統(tǒng)下認識,我們建立的目錄是文件,文本文檔是文件,圖片是文件。

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

在Linux中有這么一句話:Linux下一切皆文件。

為什么這么說的呢?

Linux中所有的內容都是以文件的形式保存的,我們認為普通文件是文件,一個目錄我們也稱為文件,甚至認為硬件設備(鍵盤,硬盤,打印機等)是文件。

Linux有一個根目錄,其他的所以的文件都放在根目錄中。

2、文件的類型

普通文件

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

直接就可以使用的我們就稱為普通文件,如上面的makefile就是一個普通文件

目錄文件

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

這個目錄中包含各個文件的文件名和文件及其指向這些文件的指針,只要有權限就可以訪問目錄中的任何文件,上面的myshell就是一個目錄文件,一個目錄不僅僅有目錄名,還有一些權限設置、文件大小等。

其他的一些文件類型:字符設備文件和塊設文件、套接字文件(socket)、符號鏈接文件(symbolic link)、管道文件(pipe)。

3、文件的共識

  1. 空文件,也要在磁盤中占據空間。
  2. 文件 = 內容 +屬性。
  3. 文件操縱 = 對內容 + 對屬性.
  4. 如果沒有指明對應的文件的路徑,和默認當前路徑。
  5. 當我們通過fopen,fclose,fwrite,fread對文件進行操縱的時候,編譯代碼,形成可執(zhí)行的程序,但是不運行,對于的文件操縱執(zhí)行了嗎?沒有對文件的操縱,本質上是進程對文件的操縱。
  6. 一個文件沒有被打開,可以直接進行文件的訪問嗎?不能

通過上面的共識我們可以得出,對文件的操縱的本質?:是進程和打開文件的關系

二、系統(tǒng)級的文件操作接口?

我們在C語言和C++都有對文件的操縱函數,我們都知道文件是存放在磁盤上的,而要想訪問文件就必須將磁盤上的文件導入到內存中,在進行相應的操作,其實本質上是操作系統(tǒng)在對這些文件進行管理,而C語言和C++中對文件的操作的接口,他底層也是操作系統(tǒng)對文件操作的接口,只是通過了封裝了而已。

1、文件打開open/文件關閉close

文件打開open

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

?頭文件:<sys/types.h>、?<sys/stat.h>、<fcntl.h>

訪問形式:

1、int open(const char *pathname, int flags);

2、int open(const char *pathname, int flags, mode_t mode);

當我們要調用open接口就必須包含相應的頭文件,但這里要注意的是這里接口為我們提供了二個調用的方式,方式1是文件已經存在我們調用,方式2是文件不存在時要調用的接口

接口參數:

const char *pathname:這里就指我們要打開的文件名

int flags:指的是標記位,傳過來的比特位,不同的比特位就調用不同選項,從對文件進行一些初始化。

mode_t mode:這里是設置相應的權限(如操作系統(tǒng)默認的普通文件的權限是0x666)

這里我們要重點了解open接口的第二個參數,上面我們說他是一個標記位?,我們知道一個int是有32個比特位了,這里我們用每個比特位表示不同的選項。

下面我們看一段代碼理解一下:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>

// 每一個宏,對應的數值,只有一個比特位是1,彼此位置不重疊
#define ONE (1<<0)
#define TWO (1<<1)
#define THREE  (1<<2)
#define FOUR (1<<3)

void show(int flags)
{
    if(flags & ONE) printf("one\n");
    if(flags & TWO) printf("two\n");
    if(flags & THREE) printf("three\n");
    if(flags & FOUR) printf("four\n");
}

int main()
{
    show(ONE);
    printf("-----------------------\n");
    show(TWO);
    printf("-----------------------\n");
    show(ONE | TWO);
    printf("-----------------------\n");
    show(ONE | TWO | THREE);
    printf("-----------------------\n");
    show(ONE | TWO | THREE | FOUR);
    printf("-----------------------\n");
    return 0;
}

?int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

當我們運行代碼,就會發(fā)現我們通過不同的比特位就調用了不同的參數選項,展現出現不同的效果。

flags多個選項:

  • O_RDONLY: 只讀打開
  • O_WRONLY: 只寫打開
  • O_RDWR : 讀,寫打開
  • 這三個常量,必須指定一個且只能指定一個
  • O_CREAT : 若文件不存在,則創(chuàng)建它。需要使用mode選項,來指明新文件的訪問權
  • O_APPEND: 追加寫
  • O_TRUNC如果文件已經存在,且成功打開,則刪除文件中原來的全部數據

對于這些選項我們還可以進行功能的多選,選項間用 “ |?”?分割

O_RDONY | O_CREAT//這里的文件用只讀的方式創(chuàng)建,如果沒有這個文件會自動創(chuàng)建

返回值

  • 成功:新打開的文件描述符(fd)
  • 失?。?1

文件關閉 close

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

文件關閉接口用起來非常簡單,只要給他傳打開文件的文件描述符就可以了。?

2、其他的文件接口

read讀文件

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

函數原型:

ssize_t read(int fd, void *buf, size_t count);

參數?

  • fd:是文描述符
  • buf:接收讀取數據的緩存區(qū)
  • count:讀取的字節(jié)數
  • 返回值:讀取成功則返回讀取的字節(jié)數,讀取到文件尾則返回0,讀取失敗則返回-1,同時設置全局變量errno的值來表示錯誤原因;

?write寫文件

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

函數原型:

ssize_t write(int fd, const void *buf, size_t count);

參數:

  • fd:是文描述符
  • buf:存放寫入數據的緩存區(qū)
  • count:寫入的的字節(jié)數
  • 返回值:寫入成功則返回實際寫入的字節(jié)數,寫入失敗則返回-1,同時設置全局變量errno的值來表示錯誤原因;

3、代碼演示文件操作?

下面為了更好的理解文件操作,為了大家演示了文件的打開,寫入和讀取數據,最后在關閉。

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    //定義文件名
    char filename[] = "pjb.txt";
    //定義寫入的數據
    char write_data[] = "hellow Linux!";
    //讀取的數據
    char read_buf[64] = { 0 };

    //測試寫入數據
    int fd = open(filename, O_RDWR | O_CREAT, O664);
    if (fd < 0)
    {
        perror("open");
        return -1;
    }
    //寫入內容
    int ret = write(fd, write_data, sizeof(write_data));
    if (ret < 0)
    {
        perror("write");
        return -1;
    }
    else
    {
        printf("write: %s\n", write_data);
    }
    //關閉文件
    close(fd);
    //測試寫入文件
    fd = open(filename, O_RDONLY);;
    if (fd < 0)
    {
        perror("open");
        return -1;
    }
    //寫入
    ret = read(fd, read_buf, sizeof(read_buf));
    if (ret < 0)
    {
        perror("read");
        return -1;
    }
    else
    {
        printf("read: %s\n", read_buf);
    }
    close(fd);
    return 0;
}

int fd = open(log_filename, o_rdwr,Linux的學習日常知識,linux,運維,服務器

?這里觀察到我們成功向文件中寫入和向文件中讀取數據。文章來源地址http://www.zghlxwxcb.cn/news/detail-789389.html

到了這里,關于[Linux打怪升級之路]-文件操作的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C++從零開始的打怪升級之路(day13)

    這是關于一個普通雙非本科大一學生的C++的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 今天學了一些基礎的string的函數,刷了一些題,等string學完了再總結語法,函數 把字符串

    2024年01月20日
    瀏覽(22)
  • C++從零開始的打怪升級之路(day20)

    這是關于一個普通雙非本科大一學生的C++的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 今天分享的是關于vector的題目 260. 只出現一次的數字 III 給你一個整數數組? nums ,其中恰

    2024年01月25日
    瀏覽(23)
  • C++從零開始的打怪升級之路(day11)

    這是關于一個普通雙非本科大一學生的C++的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 為了鞏固前面的知識,最近更新刷題貼,C++進度暫緩 反轉字符串中的單詞 III ?由于還沒學

    2024年01月18日
    瀏覽(25)
  • C++從零開始的打怪升級之路(day19)

    這是關于一個普通雙非本科大一學生的C++的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 今天分享的是關于vector的題目 137. 只出現一次的數字 II 給你一個整數數組? nums ?,除某個

    2024年01月25日
    瀏覽(17)
  • C++從零開始的打怪升級之路(day12)

    這是關于一個普通雙非本科大一學生的C++的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 今天學習了關于模板的知識,下面展開分析 首先我們思考一個問題,如何是實現一個通用

    2024年01月22日
    瀏覽(25)
  • <Linux> 基礎IO(文件操作、文件描述符fd、重定向)

    <Linux> 基礎IO(文件操作、文件描述符fd、重定向)

    1、空文件也要在磁盤占用 我們創(chuàng)建的文件,雖然里面并沒有存放數據,但是文件屬性也是數據,即便你創(chuàng)建一個空文件,也要占據磁盤空間 2、文件 = 文件內容 + 文件屬性 文件內容就是真正寫入的內容,文件屬性就是文件名、文件大小、文件的權限、擁有者所屬組…… 3、文

    2024年02月03日
    瀏覽(36)
  • 【Linux】文件描述符 - fd

    【Linux】文件描述符 - fd

    使用 man open 指令查看手冊: open 函數具體使用哪個,和具體應用場景有關。如:目標文件不存在,需要 open 創(chuàng)建,則第三個參數表示創(chuàng)建文件的默認權限;否則使用兩個參數的 open。 write read close lseek ,類比 C 文件相關接口。 操作文件,除了使用 C 語言的接口【Linux】回顧

    2024年03月23日
    瀏覽(24)
  • Linux - fd文件描述符和文件詳解

    Linux - fd文件描述符和文件詳解

    ? ???????????????????????????????????????????????????????? ? ? ? ? ? ????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???感謝各位 點贊 收藏 評論 三連支持 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本文

    2024年02月08日
    瀏覽(20)
  • Linux--文件描述符fd的本質

    Linux--文件描述符fd的本質

    ?? ?

    2024年02月16日
    瀏覽(21)
  • 【Linux】基礎IO----系統(tǒng)文件IO & 文件描述符fd & 重定向

    【Linux】基礎IO----系統(tǒng)文件IO & 文件描述符fd & 重定向

    作者:?舊言~ 座右銘:松樹千年終是朽,槿花一日自為榮。 目標:了解在Linux下的系統(tǒng)文件IO,知道什么是文件描述符,什么是重定向 毒雞湯:白日莫閑過,青春不再來。 專欄選自:Linux初階 望小伙伴們點贊??收藏?加關注喲???? 最早我們在C語言中學習關于如何用代碼

    2024年04月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包