【Linux操作系統】舉例解釋Linux系統編程中文件io常用的函數

在Linux系統編程中,文件IO操作是非常常見和重要的操作之一。通過文件IO操作,我們可以打開、讀取、寫入和關閉文件,對文件進行定位、復制、刪除和重命名等操作。本篇博客將介紹一些常用的文件IO操作函數。
在這里插入圖片描述

文章目錄

    • 1. open()
      • 1.1 原型、參數及返回值說明
        • 1.1.1 原型:
        • 1.1.2 參數說明:
        • 1.1.3 返回值:
      • 1.2 函數示例
      • 1.3 代碼解釋
    • 2. close()
      • 2.1 原型、參數及返回值說明
        • 2.1.1 原型:
        • 2.1.2 參數:
        • 2.1.3 返回值:
      • 2.2 函數示例
      • 2.3 代碼解釋
    • 3. read()
      • 3.1 原型、參數及返回值說明
        • 3.1.1 原型:
        • 3.1.2 參數:
        • 3.1.3 返回值:
      • 3.2 函數示例
      • 3.3 代碼解釋
    • 4. write()
      • 4.1 原型、參數及返回值說明
        • 4.1.1 原型:
        • 4.1.2 參數:
        • 4.1.3 返回值:
      • 4.2 函數示例
      • 4.3 代碼解釋
    • 5. lseek()
      • 5.1 原型、參數及返回值說明
        • 5.1.1 原型:
        • 5.1.2 參數:
        • 5.1.3 返回值:
      • 5.2 函數示例
      • 5.3 代碼解釋
    • 6. stat()
      • 6.1 原型、參數及返回值說明
        • 6.1.1 原型:
        • 6.1.2 參數:
        • 6.1.3 返回值:
      • 6.2 函數示例
      • 6.3 代碼解釋
    • 7. fcntl()
      • 7.1 原型、參數及返回值說明
        • 7.1.1 原型:
        • 7.1.2 參數:
        • 7.1.3 返回值:
      • 7.2 函數示例
      • 7.3 代碼解釋
    • 總結

1. open()

1.1 原型、參數及返回值說明

1.1.1 原型:

open()函數是Linux系統編程中常用的文件IO操作函數之一。它用于打開文件并返回一個文件描述符,以便后續的文件讀寫操作。
open()函數的原型如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);

1.1.2 參數說明:

  1. pathname:要打開的文件路徑名。
  2. flags:打開文件的模式標志,可以是以下幾種模式的組合:
    • O_RDONLY:只讀模式打開文件。
    • O_WRONLY:只寫模式打開文件。
    • O_RDWR:讀寫模式打開文件。
    • O_CREAT:如果文件不存在,則創建文件。
    • O_EXCL:與O_CREAT一同使用,如果文件已存在,則返回錯誤。
    • O_TRUNC:如果文件存在且以可寫模式打開,則將文件截斷為0。
    • O_APPEND:在文件末尾追加數據。
  3. mode 創建文件時的訪問權限,只有在使用O_CREAT時才有效。
    可以使用如下幾個宏來設置權限:
    • S_IRUSR:用戶讀權限。
    • S_IWUSR:用戶寫權限。
    • S_IXUSR:用戶執行權限。
    • S_IRGRP:組讀權限。
    • S_IWGRP:組寫權限。
    • S_IXGRP:組執行權限。
    • S_IROTH:其他用戶讀權限。
    • S_IWOTH:其他用戶寫權限。
    • S_IXOTH:其他用戶執行權限。

1.1.3 返回值:

  • 成功:返回一個非負整數的文件描述符,用于后續的文件IO操作。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

1.2 函數示例

下面是一個使用open()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>int main() {int fd;// 打開文件fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);if (fd == -1) {perror("open");return errno;}// 寫入數據char buffer[] = "Hello, world!";ssize_t ret = write(fd, buffer, sizeof(buffer) - 1);if (ret == -1) {perror("write");close(fd);return errno;}// 關閉文件close(fd);return 0;
}

1.3 代碼解釋

在上述示例中,我們首先使用open()函數以只寫模式打開一個文件example.txt。如果文件不存在,則創建該文件,并設置訪問權限為用戶可讀可寫。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們使用write()函數向文件中寫入數據。在本例中,我們寫入了字符串"Hello, world!"。如果寫入數據失敗,我們同樣使用perror()函數打印錯誤信息,并在關閉文件前返回errno變量。

最后,我們使用close()函數關閉文件。

2. close()

2.1 原型、參數及返回值說明

2.1.1 原型:

close()函數是Linux系統編程中用于關閉文件的函數。它接受一個文件描述符作為參數,并返回一個整數值來指示操作是否成功。

close()函數的原型如下:

#include <unistd.h>int close(int fd);

2.1.2 參數:

  • fd:要關閉的文件描述符。

2.1.3 返回值:

  • 成功:返回0。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

2.2 函數示例

下面是一個使用close()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打開文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 關閉文件int ret = close(fd);if (ret == -1) {perror("close");return errno;}return 0;
}

2.3 代碼解釋

在上述示例中,我們首先使用open()函數以只讀模式打開一個文件example.txt,并將返回的文件描述符存儲在變量fd中。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們使用close()函數關閉文件。如果關閉文件失敗,我們同樣使用perror()函數打印錯誤信息,并返回errno變量。

需要注意的是,關閉文件后,我們不應再對該文件描述符進行任何操作。

3. read()

3.1 原型、參數及返回值說明

3.1.1 原型:

read()函數是Linux系統編程中用于從文件中讀取數據的函數。它接受一個文件描述符、一個緩沖區地址和一個讀取的最大字節數作為參數,并返回實際讀取的字節數。

read()函數的原型如下:

#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);

3.1.2 參數:

  • fd:要讀取的文件的文件描述符。
  • buf:用于存儲讀取數據的緩沖區的地址。
  • count:要讀取的最大字節數。

3.1.3 返回值:

  • 成功:返回實際讀取的字節數。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

3.2 函數示例

下面是一個使用read()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打開文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 讀取數據char buffer[100];ssize_t ret = read(fd, buffer, sizeof(buffer));if (ret == -1) {perror("read");close(fd);return errno;}// 輸出讀取的數據printf("Read %ld bytes: %s\n", ret, buffer);// 關閉文件close(fd);return 0;
}

3.3 代碼解釋

在上述示例中,我們首先使用open()函數以只讀模式打開一個文件example.txt,并將返回的文件描述符存儲在變量fd中。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們使用read()函數從文件中讀取數據。我們定義一個長度為100的緩沖區buffer,并將其作為參數傳遞給read()函數。read()函數將盡量讀取count個字節的數據,并將其存儲在緩沖區中。如果讀取數據失敗,我們同樣使用perror()函數打印錯誤信息,并在關閉文件前返回errno變量。

最后,我們使用printf()函數輸出讀取的數據,并使用close()函數關閉文件。

需要注意的是,read()函數是一個阻塞函數,如果文件中沒有足夠的數據可讀,它將一直等待直到有足夠的數據可讀或者發生錯誤。如果需要非阻塞地讀取數據,可以使用fcntl()函數設置文件描述符為非阻塞模式。

4. write()

4.1 原型、參數及返回值說明

4.1.1 原型:

write()函數是Linux系統編程中用于向文件中寫入數據的函數。它接受一個文件描述符、一個數據緩沖區地址和要寫入的字節數作為參數,并返回實際寫入的字節數。

write()函數的原型如下:

#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);

4.1.2 參數:

  • fd:要寫入的文件的文件描述符。
  • buf:要寫入的數據的緩沖區的地址。
  • count:要寫入的字節數。

4.1.3 返回值:

  • 成功:返回實際寫入的字節數。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

4.2 函數示例

下面是一個使用write()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打開文件fd = open("example.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);if (fd == -1) {perror("open");return errno;}// 寫入數據char buffer[] = "Hello, World!";ssize_t ret = write(fd, buffer, sizeof(buffer) - 1);if (ret == -1) {perror("write");close(fd);return errno;}// 關閉文件close(fd);return 0;
}

4.3 代碼解釋

在上述示例中,我們首先使用open()函數以只寫模式打開一個文件example.txt,并將返回的文件描述符存儲在變量fd中。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們使用write()函數將數據寫入文件中。我們定義一個字符串buffer,并將其作為參數傳遞給write()函數。write()函數將盡量寫入count個字節的數據到文件中。如果寫入數據失敗,我們同樣使用perror()函數打印錯誤信息,并在關閉文件前返回errno變量。

最后,我們使用close()函數關閉文件。

需要注意的是,write()函數是一個阻塞函數,如果文件無法立即接受寫入的數據(例如,磁盤空間不足),它將一直等待直到可以寫入數據或者發生錯誤。如果需要非阻塞地寫入數據,可以使用fcntl()函數設置文件描述符為非阻塞模式。

5. lseek()

5.1 原型、參數及返回值說明

5.1.1 原型:

lseek()函數是Linux系統編程中用于在文件中定位讀寫位置的函數。它接受一個文件描述符、一個偏移量和一個起始位置作為參數,并返回新的讀寫位置。

lseek()函數的原型如下:

#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);

5.1.2 參數:

  • fd:要定位的文件的文件描述符。
  • offset:偏移量,可以是正數、負數或零。
  • whence:起始位置,可以取以下三個值:
    • SEEK_SET:從文件開頭開始計算偏移量。
    • SEEK_CUR:從當前讀寫位置開始計算偏移量。
    • SEEK_END:從文件末尾開始計算偏移量。

5.1.3 返回值:

  • 成功:返回新的讀寫位置。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

5.2 函數示例

下面是一個使用lseek()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>int main() {int fd;// 打開文件fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open");return errno;}// 定位讀寫位置off_t ret = lseek(fd, 5, SEEK_SET);if (ret == -1) {perror("lseek");close(fd);return errno;}// 讀取數據char buffer[10];ssize_t n = read(fd, buffer, sizeof(buffer) - 1);if (n == -1) {perror("read");close(fd);return errno;}buffer[n] = '\0';printf("Data: %s\n", buffer);// 關閉文件close(fd);return 0;
}

5.3 代碼解釋

在上述示例中,我們首先使用open()函數以只讀模式打開一個文件example.txt,并將返回的文件描述符存儲在變量fd中。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們使用lseek()函數將讀寫位置定位到文件開頭后的第5個字節。我們將文件描述符、偏移量和起始位置作為參數傳遞給lseek()函數。如果定位讀寫位置失敗,我們同樣使用perror()函數打印錯誤信息,并在關閉文件前返回errno變量。

然后,我們使用read()函數從文件中讀取數據。我們定義一個緩沖區buffer,并將其作為參數傳遞給read()函數。read()函數將盡量讀取count個字節的數據到緩沖區中。如果讀取數據失敗,我們同樣使用perror()函數打印錯誤信息,并在關閉文件前返回errno變量。最后,我們在緩沖區末尾添加一個空字符,并使用printf()函數打印讀取到的數據。

最后,我們使用close()函數關閉文件。

需要注意的是,lseek()函數可以用于定位讀寫位置,但并不會改變文件的大小。如果需要改變文件的大小,可以使用truncate()函數或ftruncate()函數。

6. stat()

6.1 原型、參數及返回值說明

6.1.1 原型:

stat()函數是Linux系統編程中用于獲取文件信息的函數。它接受一個文件路徑作為參數,并返回一個包含文件信息的結構體。

stat()函數的原型如下:

#include <sys/types.h>
#include <sys/stat.h>int stat(const char *pathname, struct stat *buf);

6.1.2 參數:

  • pathname:要獲取信息的文件路徑。
  • buf:用于存儲文件信息的結構體指針。

6.1.3 返回值:

  • 成功:返回0。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

struct stat結構體包含了文件的各種信息,包括文件類型、權限、大小、創建時間、修改時間等

下面是struct stat結構體的定義:

struct stat {dev_t     st_dev;         // 文件所在設備的IDino_t     st_ino;         // 文件的inode號mode_t    st_mode;        // 文件的類型和權限nlink_t   st_nlink;       // 文件的硬鏈接數uid_t     st_uid;         // 文件的所有者IDgid_t     st_gid;         // 文件的所有者組IDdev_t     st_rdev;        // 如果文件是設備文件,則為設備的IDoff_t     st_size;        // 文件的大小(字節)blksize_t st_blksize;     // 文件系統的塊大小blkcnt_t  st_blocks;      // 分配給文件的塊數time_t    st_atime;       // 文件的最后訪問時間time_t    st_mtime;       // 文件的最后修改時間time_t    st_ctime;       // 文件的最后狀態改變時間
};

6.2 函數示例

下面是一個使用stat()函數的示例:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>int main() {const char *pathname = "example.txt";struct stat file_info;// 獲取文件信息int ret = stat(pathname, &file_info);if (ret == -1) {perror("stat");return errno;}// 打印文件信息printf("File Size: %ld bytes\n", file_info.st_size);printf("File Permissions: %o\n", file_info.st_mode & 0777);printf("File Owner UID: %d\n", file_info.st_uid);printf("File Owner GID: %d\n", file_info.st_gid);return 0;
}

6.3 代碼解釋

在上述示例中,我們首先定義了一個文件路徑pathname和一個struct stat結構體file_info,用于存儲獲取到的文件信息。

然后,我們使用stat()函數將文件信息存儲到file_info結構體中。我們將文件路徑和file_info結構體指針作為參數傳遞給stat()函數。如果獲取文件信息失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

最后,我們使用printf()函數打印獲取到的文件信息,包括文件大小、文件權限、文件所有者的UIDGID等。

需要注意的是,stat()函數只能獲取文件的信息,而不能修改文件的信息。如果需要修改文件的信息,可以使用chmod()函數來修改文件的權限。

7. fcntl()

7.1 原型、參數及返回值說明

7.1.1 原型:

fcntl()函數是Linux系統編程中用于對文件描述符進行控制操作的函數。它可以用于設置文件狀態標志、獲取文件狀態標志、設置文件鎖等。

fcntl()函數的原型如下:

#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );

7.1.2 參數:

  • fd:文件描述符,可以是打開文件的文件描述符,也可以是套接字的文件描述符。
  • cmd:控制命令,用于指定要執行的操作。
  • arg:可選參數,用于傳遞特定操作的參數。

7.1.3 返回值:

  • 成功:根據不同的操作命令返回不同的值,一般為0或一個正整數。
  • 失敗:返回-1,并設置errno變量來指示錯誤類型。

下面是fcntl()函數的一些常用命令:

  • F_DUPFD:復制文件描述符,創建一個新的文件描述符,該描述符與原始描述符指向相同的打開文件。
  • F_GETFD:獲取文件描述符的文件狀態標志。
  • F_SETFD:設置文件描述符的文件狀態標志。
  • F_GETFL:獲取文件的打開方式和狀態標志。
  • F_SETFL:設置文件的打開方式和狀態標志。
  • F_GETLK:獲取文件鎖的信息。
  • F_SETLK:設置文件鎖。
  • F_SETLKW:設置文件鎖,如果無法獲取鎖,則阻塞等待。

7.2 函數示例

下面是一個使用fcntl()函數的示例:

#include <fcntl.h>
#include <stdio.h>
#include <errno.h>int main() {int fd = open("example.txt", O_RDWR);if (fd == -1) {perror("open");return errno;}// 獲取文件的打開方式和狀態標志int flags = fcntl(fd, F_GETFL);if (flags == -1) {perror("fcntl");return errno;}// 設置文件的狀態標志為非阻塞flags |= O_NONBLOCK;int ret = fcntl(fd, F_SETFL, flags);if (ret == -1) {perror("fcntl");return errno;}// 關閉文件描述符close(fd);return 0;
}

7.3 代碼解釋

在上述示例中,我們首先使用open()函數打開一個文件,并將返回的文件描述符存儲在變量fd中。如果打開文件失敗,我們使用perror()函數打印錯誤信息,并返回errno變量。

然后,我們使用fcntl()函數獲取文件的打開方式和狀態標志。將文件描述符和F_GETFL命令作為參數傳遞給fcntl()函數,獲取到的文件狀態標志存儲在變量flags中。如果獲取文件狀態標志失敗,我們同樣使用perror()函數打印錯誤信息,并返回errno變量。

接下來,我們將文件的狀態標志設置為非阻塞,通過將O_NONBLOCK標志位與flags進行按位或操作。然后,我們使用fcntl()函數將修改后的狀態標志設置回文件描述符。將文件描述符、F_SETFL命令和修改后的狀態標志作為參數傳遞給fcntl()函數。如果設置文件狀態標志失敗,我們同樣使用perror()函數打印錯誤信息,并返回errno變量。

最后,我們使用close()函數關閉文件描述符,釋放資源。

需要注意的是,fcntl()函數的使用非常靈活,可以根據需要進行各種操作,如復制文件描述符、獲取文件鎖等。在使用fcntl()函數時,需要注意錯誤處理,并確保文件描述符的有效性。同時,需要在不再需要使用文件描述符時及時關閉文件描述符,以釋放資源并避免資源泄漏。

總結

文件IO操作是Linux系統編程中的重要部分。通過open()close()read()write()等函數,我們可以對文件進行打開、讀取和寫入操作。通過lseek()函數,我們可以在文件中進行定位。而通過stat()fcntl()dup()等函數,我們可以獲取文件的狀態信息,對文件描述符進行控制操作,復制文件描述符等。

除了上述的函數,還有許多其他的函數可以用于文件IO操作,如mkdir()用于創建目錄,rmdir()用于刪除目錄,unlink()用于刪除文件,rename()用于重命名文件等。

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

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

相關文章

讀書筆記 |【項目思維與管理】? 順勢而動

讀書筆記 |【項目思維與管理】? 順勢而動 一、企業步入“終結者時代”二、過去成功的經驗也許是最可怕的三、做好非重復性的事四、適應客戶是出發點五、向知識型企業轉變六、速度是決勝條件 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; …

docker私有倉庫harbor

一、安裝docker-compose yum install docker-compose -y 二、下載harbor安裝包 tar -xf harbor-online-installer-v2.1.0.tgz cp harbor.yml.tmpl harbor.yml 三、修改harbor配置 [rootharbor ~]# vim harbor.ymlhostname: "修改為本機ip" harboradminpassword:…

每天一道leetcode:1218. 最長定差子序列(動態規劃中等)

今日份題目&#xff1a; 給你一個整數數組 arr 和一個整數 difference&#xff0c;請你找出并返回 arr 中最長等差子序列的長度&#xff0c;該子序列中相鄰元素之間的差等于 difference 。 子序列 是指在不改變其余元素順序的情況下&#xff0c;通過刪除一些元素或不刪除任何…

iTOP-i.MX8M開發板添加USB網絡設備驅動

選中支持 USB 網絡設備驅動&#xff0c;如下圖所示&#xff1a; [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 將光標移動到 save 保存&#xff0c;如下圖所示&#xff1a; 保存到 arch/arm64/c…

樹形動態規劃——樹形dp

樹形動態規劃 樹形 d p dp dp算法是一種用于解決樹相關問題的動態規劃算法。它把樹的問題分解成了子問題&#xff0c;并通過子問題的求解來構建整個問題的解。 當我們面對一棵樹的問題時&#xff0c;我們可以使用樹形 d p dp dp來解決。這種算法的基本思想是通過定義一個用于…

C語言入門 Day_5 四則運算

目錄 前言 1.四則運算 2.其他運算 3.易錯點 4.思維導圖 前言 圖為世界上第一臺通用計算機ENIAC,于1946年2月14日在美國賓夕法尼亞大學誕生。發明人是美國人莫克利&#xff08;JohnW.Mauchly&#xff09;和艾克特&#xff08;J.PresperEckert&#xff09;。 計算機的最開始…

代碼隨想錄第四十四天

代碼隨想錄第四十四天 Leetcode 518. 零錢兌換 IILeetcode 377. 組合總和 Ⅳ Leetcode 518. 零錢兌換 II 題目鏈接: 零錢兌換 II 自己的思路:想不到&#xff0c;忘記這個遞推公式了&#xff01;&#xff01;&#xff01;而且初始化也要值得注意&#xff01; 正確思路:由于這個…

js數組學習(ES6+)

文章目錄 js(ES6)數組學習1.Array.prototype.forEach(fn)2.Array.prototype.map(fn)3.Array.prototype.filter(fn)4.Array.prototype.reduce(fn)5.Array.prototype.some(fn) every6.Array.prototype.find(fn)7.Array.prototype.includes(item) js(ES6)數組學習 1.Array.protot…

kube-prometheus 系列3 使用 blackbox-exporter 進行 icmp 和 http 監控

安裝kube-prometheus 后默認在monitoring namespace中有創建 blackbox-exporter deployment。但默認沒有icmp的module配置&#xff0c;無法執行ping探測。因為即使有icmp module&#xff0c;默認配置也是無法執行ping探測的&#xff08;這篇文章要解決的就是這個問題&#xff0…

CentOS 7 下 Keepalived + Nginx 實現雙機高可用

CentOS 7 下 Keepalived Nginx 實現雙機高可用 文章目錄 CentOS 7 下 Keepalived Nginx 實現雙機高可用服務器準備服務信息服務架構 服務安裝nginxKeepalived 服務配置nginxKeepalived 啟動服務nginxkeepalived 服務驗證查看 VIP 狀態CURL 命令訪問瀏覽器訪問 高可用驗證停止…

146. LRU 緩存

題目描述 請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 實現 LRUCache 類&#xff1a; LRUCache(int capacity) 以 正整數 作為容量 capacity 初始化 LRU 緩存int get(int key) 如果關鍵字 key 存在于緩存中&#xff0c;則返回關鍵字的值&#xff0c;否…

vue+springboot 前后端分離 上傳文件處理后再下載,并且傳遞參數

vue代碼 <template><div><input type"file" ref"fileInput" accept".json"/><el-button click"upload">上傳</el-button></div> </template><script> export default {name: "…

【第二階段】kotlin的lambda學習

匿名函數lambdm表達式 1.兩數相加 fun main() {//匿名函數lambda表達式//兩數相加 等價&#xff1a;val addResult:(Int,Int)->String{a,b->"兩數相加結果&#xff1a;${ab}"}val addResult{a:Int,b:Int->"兩數相加結果${ab}"}println(addResul…

Stable Diffusion WebUI 從零基礎到入門

本文主要介紹Stable Diffusion WebUI的實際操作方法&#xff0c;涵蓋prompt推導、lora模型、vae模型和controlNet應用等內容&#xff0c;并給出了可操作的文生圖、圖生圖實戰示例。適合對Stable Diffusion感興趣&#xff0c;但又對Stable Diffusion WebUI使用感到困惑的同學&am…

CSS變形與動畫(二):perspctive透視效果 與 preserve-3d 3d效果(奧運五環例子)

文章目錄 perspective 3d透視效果preserve-3d 3d嵌套效果例子 奧運五環 backface-visibility 背面效果 perspective 3d透視效果 perspective 指定了觀察者與 z0 平面的距離&#xff0c;使具有三維位置變換的元素產生透視效果。z>0 的三維元素比正常大&#xff0c;而 z<0 …

試崗第一天問題

1、公司的一個項目拉下來 &#xff0c;npm i 不管用顯示 后面百度 使用了一個方法 雖然解決 但是在增加別的依賴不行&#xff0c;后面發現是node版本過高&#xff0c;更換node版本解決。 2、使用插件動態的使數字從0到100&#xff08;vue-animate-number插件&#xff09; 第一…

ChatGPT or BingChat

你相信我們對大模型也存在「迷信權威」嗎&#xff1f; ChatGPT 的 GPT-4 名聲在外&#xff0c;我們就不自覺地更相信它&#xff0c;優先使用它。但我用 ChatALL 比較 AI 大模型們這么久&#xff0c;得到的結論是&#xff1a; ChatGPT GPT-4 在大多數情況下確實是最強&#xf…

插入、希爾、歸并、快速排序(java實現)

目錄 插入排序 希爾排序 歸并排序 快速排序 插入排序 排序原理&#xff1a; 1.把所有元素分為兩組&#xff0c;第一組是有序已經排好的&#xff0c;第二組是亂序未排序。 2.將未排序一組的第一個元素作為插入元素&#xff0c;倒序與有序組比較。 3.在有序組中找到比插入…

Linux 內核內存管理 page_address 函數

文章目錄 一、page_address1.1 page_address1.2 page_to_pfn1.3 PFN_PHYS1.4 __va(x)1.5 總結1.6 page_to_virt 二、使用demo 一、page_address 1.1 page_address 內核用 struct page 結構體來表示系統中的每個物理頁面&#xff0c;該結構體用來跟蹤和管理這些物理頁面的使用…

MySQL面試題一

MySQL 索引使用有哪些注意事項呢&#xff1f; 可以從兩個維度回答這個問題&#xff1a; 索引哪些情況會失效&#xff0c;索引不適合哪些場景 索引哪些情況會失效 查詢條件包含or&#xff0c;會導致索引失效。隱式類型轉換&#xff0c;會導致索引失效&#xff0c; 例如age字…