Linux I/O 函數完整清單

Linux I/O 函數完整清單

1. 基礎 I/O 函數

1.1 基本讀寫

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

1.2 位置指定讀寫

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

1.3 文件位置操作

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

2. 分散/聚集 I/O 函數

2.1 基本分散/聚集

#include <sys/uio.h>ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

2.2 位置指定分散/聚集

#include <sys/uio.h>ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset);
ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset);

2.3 增強版分散/聚集

#define _GNU_SOURCE
#include <sys/uio.h>ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);

3. 文件控制函數

3.1 文件描述符控制

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

3.2 文件操作

#include <fcntl.h>
#include <sys/stat.h>int open(const char *pathname, int flags, ...);
int openat(int dirfd, const char *pathname, int flags, ...);
int creat(const char *pathname, mode_t mode);
int close(int fd);

3.3 文件狀態

#include <sys/stat.h>int stat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
int fstatat(int dirfd, const char *pathname, struct stat *statbuf, int flags);

4. 高級 I/O 函數

4.1 內存映射 I/O

#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);
int msync(void *addr, size_t length, int flags);

4.2 異步 I/O

#include <aio.h>int aio_read(struct aiocb *aiocbp);
int aio_write(struct aiocb *aiocbp);
int aio_error(const struct aiocb *aiocbp);
ssize_t aio_return(struct aiocb *aiocbp);
int aio_suspend(const struct aiocb *const aiocb_list[], int nitems,const struct timespec *timeout);

4.3 Linux AIO (系統調用級別)

#include <linux/aio_abi.h>
#include <sys/syscall.h>int io_setup(unsigned nr_events, aio_context_t *ctxp);
int io_destroy(aio_context_t ctx);
int io_submit(aio_context_t ctx, long nr, struct iocb **iocbpp);
int io_getevents(aio_context_t ctx, long min_nr, long nr,struct io_event *events, struct timespec *timeout);

4.4 io_uring (現代異步 I/O)

#include <liburing.h>int io_uring_queue_init(unsigned entries, struct io_uring *ring, unsigned flags);
int io_uring_queue_exit(struct io_uring *ring);
int io_uring_submit(struct io_uring *ring);
int io_uring_wait_cqe(struct io_uring *ring, struct io_uring_cqe **cqe);

5. 目錄操作函數

5.1 目錄遍歷

#include <dirent.h>DIR *opendir(const char *name);
DIR *fdopendir(int fd);
struct dirent *readdir(DIR *dirp);
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
int closedir(DIR *dirp);
void rewinddir(DIR *dirp);
long telldir(DIR *dirp);
void seekdir(DIR *dirp, long loc);

5.2 目錄創建/刪除

#include <sys/stat.h>
#include <unistd.h>int mkdir(const char *pathname, mode_t mode);
int mkdirat(int dirfd, const char *pathname, mode_t mode);
int rmdir(const char *pathname);

6. 文件系統函數

6.1 文件系統操作

#include <sys/statvfs.h>
#include <sys/vfs.h>int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);

6.2 文件系統控制

#include <sys/mount.h>int mount(const char *source, const char *target,const char *filesystemtype, unsigned long mountflags,const void *data);
int umount(const char *target);
int umount2(const char *target, int flags);

7. 符號鏈接和特殊文件

7.1 符號鏈接操作

#include <unistd.h>ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
ssize_t readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
int symlink(const char *target, const char *linkpath);
int symlinkat(const char *target, int newdirfd, const char *linkpath);

7.2 特殊文件操作

#include <sys/stat.h>
#include <fcntl.h>
#include <sys/sysmacros.h>int mknod(const char *pathname, mode_t mode, dev_t dev);
int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);

8. 擴展屬性函數

8.1 擴展屬性操作

#include <sys/xattr.h>ssize_t getxattr(const char *path, const char *name, void *value, size_t size);
ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size);
ssize_t fgetxattr(int fd, const char *name, void *value, size_t size);ssize_t listxattr(const char *path, char *list, size_t size);
ssize_t llistxattr(const char *path, char *list, size_t size);
ssize_t flistxattr(int fd, char *list, size_t size);int setxattr(const char *path, const char *name, const void *value,size_t size, int flags);
int lsetxattr(const char *path, const char *name, const void *value,size_t size, int flags);
int fsetxattr(int fd, const char *name, const void *value,size_t size, int flags);int removexattr(const char *path, const char *name);
int lremovexattr(const char *path, const char *name);
int fremovexattr(int fd, const char *name);

9. 管道和 FIFO

9.1 管道操作

#include <unistd.h>int pipe(int pipefd[2]);
int pipe2(int pipefd[2], int flags);

9.2 FIFO 操作

#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);
int mkfifoat(int dirfd, const char *pathname, mode_t mode);

10. 套接字 I/O 函數

10.1 基本套接字操作

#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);

10.2 高級套接字操作

#include <sys/socket.h>int socket(int domain, int type, int protocol);
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int listen(int sockfd, int backlog);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

11. 網絡 I/O 多路復用

11.1 傳統多路復用

#include <sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
void FD_CLR(int fd, fd_set *set);
int  FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);

11.2 現代多路復用

#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);
int ppoll(struct pollfd *fds, nfds_t nfds,const struct timespec *timeout_ts, const sigset_t *sigmask);

11.3 Linux 特有多路復用

#include <sys/epoll.h>int epoll_create(int size);
int epoll_create1(int flags);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);
int epoll_pwait(int epfd, struct epoll_event *events,int maxevents, int timeout,const sigset_t *sigmask);

12. 文件鎖定函數

12.1 文件鎖定

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

13. 緩沖 I/O 函數 (標準庫)

13.1 標準 I/O

#include <stdio.h>FILE *fopen(const char *pathname, const char *mode);
FILE *freopen(const char *pathname, const char *mode, FILE *stream);
FILE *fdopen(int fd, const char *mode);
int fclose(FILE *stream);size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int fputs(const char *s, FILE *stream);int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
void rewind(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);

14. 內存操作函數

14.1 內存操作

#include <string.h>void *memcpy(void *dest, const void *src, size_t n);
void *memmove(void *dest, const void *src, size_t n);
void *memset(void *s, int c, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);

15. 實用示例程序

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>// 演示不同 I/O 函數的使用
void demonstrate_io_functions() {printf("=== Linux I/O 函數分類演示 ===\n\n");// 1. 基礎 I/Oprintf("1. 基礎 I/O 函數:\n");printf("   - read/write: 基本讀寫操作\n");printf("   - pread/pwrite: 位置指定讀寫\n");printf("   - lseek: 文件位置操作\n\n");// 2. 分散/聚集 I/Oprintf("2. 分散/聚集 I/O 函數:\n");printf("   - readv/writev: 基本分散/聚集\n");printf("   - preadv/pwritev: 位置指定分散/聚集\n");printf("   - preadv2/pwritev2: 增強版分散/聚集\n\n");// 3. 文件控制printf("3. 文件控制函數:\n");printf("   - open/close: 文件打開/關閉\n");printf("   - fcntl: 文件描述符控制\n");printf("   - stat/fstat: 文件狀態獲取\n\n");// 4. 高級 I/Oprintf("4. 高級 I/O 函數:\n");printf("   - mmap/munmap: 內存映射 I/O\n");printf("   - aio_*: 異步 I/O\n");printf("   - io_uring: 現代異步 I/O\n\n");// 5. 目錄操作printf("5. 目錄操作函數:\n");printf("   - opendir/readdir: 目錄遍歷\n");printf("   - mkdir/rmdir: 目錄創建/刪除\n\n");// 6. 文件系統printf("6. 文件系統函數:\n");printf("   - statvfs: 文件系統狀態\n");printf("   - mount: 文件系統掛載\n\n");// 7. 特殊文件printf("7. 特殊文件函數:\n");printf("   - mknod: 創建特殊文件\n");printf("   - symlink: 創建符號鏈接\n\n");// 8. 擴展屬性printf("8. 擴展屬性函數:\n");printf("   - getxattr/setxattr: 獲取/設置擴展屬性\n");printf("   - listxattr: 列出擴展屬性\n\n");// 9. 管道和套接字printf("9. 管道和套接字函數:\n");printf("   - pipe: 創建管道\n");printf("   - socket: 創建套接字\n");printf("   - send/recv: 套接字 I/O\n\n");// 10. 多路復用printf("10. I/O 多路復用函數:\n");printf("    - select: 傳統多路復用\n");printf("    - poll: 現代多路復用\n");printf("    - epoll: Linux 特有多路復用\n\n");
}// 創建測試文件
int create_test_file(const char *filename) {int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644);if (fd == -1) {perror("創建測試文件失敗");return -1;}const char *content = "Hello, Linux I/O Functions!\n這是一個測試文件。\n";ssize_t bytes_written = write(fd, content, strlen(content));if (bytes_written == -1) {perror("寫入測試文件失敗");close(fd);return -1;}printf("創建測試文件: %s (%zd 字節)\n", filename, bytes_written);close(fd);return 0;
}// 演示文件操作函數族
void demonstrate_file_operations() {const char *test_file = "io_functions_test.txt";printf("=== 文件操作函數族演示 ===\n\n");// 創建測試文件if (create_test_file(test_file) == -1) {return;}// 1. 基本文件操作printf("1. 基本文件操作:\n");int fd = open(test_file, O_RDONLY);if (fd != -1) {char buffer[100];ssize_t bytes_read = read(fd, buffer, sizeof(buffer) - 1);if (bytes_read != -1) {buffer[bytes_read] = '\0';printf("   read: %s", buffer);}close(fd);}// 2. 位置指定操作printf("\n2. 位置指定操作:\n");fd = open(test_file, O_RDONLY);if (fd != -1) {char buffer[50];ssize_t bytes_read = pread(fd, buffer, sizeof(buffer) - 1, 10);if (bytes_read != -1) {buffer[bytes_read] = '\0';printf("   pread (從位置10開始): %s", buffer);}close(fd);}// 3. 文件狀態獲取printf("\n3. 文件狀態獲取:\n");struct stat file_stat;if (stat(test_file, &file_stat) == 0) {printf("   stat: 文件大小 %ld 字節\n", (long)file_stat.st_size);printf("         修改時間 %s", ctime(&file_stat.st_mtime));}// 4. 擴展屬性操作printf("\n4. 擴展屬性操作:\n");fd = open(test_file, O_RDWR);if (fd != -1) {const char *attr_name = "user.test_attr";const char *attr_value = "test_value";// 設置擴展屬性if (fsetxattr(fd, attr_name, attr_value, strlen(attr_value), 0) == 0) {printf("   fsetxattr: 成功設置擴展屬性\n");// 獲取擴展屬性char value_buffer[50];ssize_t attr_size = fgetxattr(fd, attr_name, value_buffer, sizeof(value_buffer) - 1);if (attr_size != -1) {value_buffer[attr_size] = '\0';printf("   fgetxattr: %s = %s\n", attr_name, value_buffer);}}close(fd);}// 5. 內存映射printf("\n5. 內存映射操作:\n");fd = open(test_file, O_RDONLY);if (fd != -1) {struct stat sb;if (fstat(fd, &sb) == 0) {void *mapped = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);if (mapped != MAP_FAILED) {printf("   mmap: 成功映射 %ld 字節\n", (long)sb.st_size);printf("         內容: %.50s...\n", (char*)mapped);munmap(mapped, sb.st_size);}}close(fd);}// 清理unlink(test_file);
}int main() {printf("=== Linux I/O 函數完整清單 ===\n\n");// 演示 I/O 函數分類demonstrate_io_functions();// 演示文件操作函數族demonstrate_file_operations();printf("\n=== I/O 函數選擇指南 ===\n");printf("選擇原則:\n");printf("1. 簡單讀寫 -> read/write\n");printf("2. 位置指定 -> pread/pwrite\n");printf("3. 多緩沖區 -> readv/writev\n");printf("4. 高性能 -> mmap/io_uring\n");printf("5. 異步操作 -> aio_*/io_uring\n");printf("6. 高并發 -> epoll\n");printf("7. 資源限制 -> prlimit64\n");printf("8. 擴展屬性 -> *xattr 函數族\n");return 0;
}

編譯和運行說明

# 編譯示例程序
gcc -o io_functions_demo demo.c# 運行示例
./io_functions_demo# 查看系統支持的 I/O 函數
man 2 read      # 查看 read 系統調用手冊
man 2 pread     # 查看 pread 系統調用手冊
man 7 aio       # 查看異步 I/O 手冊
man 7 epoll     # 查看 epoll 手冊

系統要求檢查

# 檢查內核版本
uname -r# 檢查 glibc 版本
ldd --version# 檢查系統調用支持
grep -E "(io_uring|aio|mmap)" /usr/include/asm/unistd_64.h# 查看文件系統支持
cat /proc/filesystems

這個完整的清單涵蓋了 Linux 系統中所有的 I/O 相關函數,從最基本的讀寫操作到最先進的異步 I/O 技術,為開發者提供了全面的參考資料。

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

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

相關文章

面經——電子電路技術知識詳解

電子電路技術知識詳解 目錄 德摩根定律周期性矩形波產生方法自激振蕩器原理與設計晶體管溫度效應分析反向飽和電流影響因素放大電路負反饋類型判斷正弦波90相移電路直接耦合放大器的缺點二階有源低通濾波器分析開關電源與線性電源對比 德摩根定律 德摩根定律&#xff08;De …

docker 安裝 gitlab

null文章瀏覽閱讀445次。問題&#xff1a;運行 docker run hello-world 報錯。原因&#xff1a;原鏡像源網絡不穩定。https://blog.csdn.net/sszdzq/article/details/145733419 鏡像獲取 在線下載 docker pull gitlab/gitlab-ce:17.11.1-ce.0 離線獲取 創建運行 sudo docke…

PHP中的日期/時間處理之Carbon組件

日常開發中&#xff0c;我們會經常用到日期和時間的操作&#xff0c;但官方的一般操作比較復雜&#xff0c;需要大量的時間進行格式化問題和大量計算等等。Carbon組件 可以幫助我們在 PHP 開發中處理日期/時間變得更加簡單、更語義化&#xff0c;從而使得我們的代碼更容易閱讀和…

學習嵌入式第十八天

文章目錄1.數據結構1.概念2.衡量代碼質量和效率1.時間復雜度2.空間復雜度3.數據結構分類1.邏輯結構2.存儲結構3.常見的數據結構2.鏈表1.與順序表的區別2.鏈表分類1.單向鏈表1.定義鏈表節點類型2.空鏈表的創建3.鏈表的頭插法4.鏈表的遍歷5.鏈表元素刪除3.makefile習題1.數據結構…

基于SpringBoot+Vue實現校園商鋪系統

作者主頁&#xff1a;編程指南針 作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參…

從資源閑置到彈性高吞吐,JuiceFS 如何構建 70GB/s 吞吐的緩存池?

AI 模型的訓練與推理對存儲系統提出了極為嚴苛的要求&#xff0c;特別是在高吞吐、高并發以及對海量小文件的高效處理方面&#xff0c;已成為三大主要挑戰。盡管基于 Lustre 或 GPFS 的并行文件系統具備出色的性能&#xff0c;但其成本高昂、吞吐能力與容量強耦合&#xff0c;可…

提升JVM性能之CMS垃圾回收器的優化分析與案例剖析

這里寫目錄標題一、CMS基本介紹二、CMS核心優化策略1. 避免并發模式失敗&#xff08;Concurrent Mode Failure&#xff09;2. 減少內存碎片3. 調優并發階段耗時4. 新生代優化配合三、典型案例解析案例1&#xff1a;電商服務頻繁Full GC案例2&#xff1a;金融交易系統碎片導致長…

Token系列 - 再談穩定幣

相關政策 2024年12月&#xff0c;歐洲《加密資產市場監管法案》正式成為法律2025年3月&#xff0c;日本細化了加密資產及穩定幣的監管調整2025年5月&#xff0c;英國發布了關于穩定幣發行、加密資產托管及加密資產公司財務穩健性的監管提案&#xff1b;2025年5月20日&#xff…

【20min 急速入門】使用Demucs進行音軌分離

創建環境 conda create --name mujica python3.10下載加速依賴 先用nvidia-smi檢查機器使用的獨顯版本, 然后從pytorch官網下載對應的GPU版torch, torchaudio 比如我的是12.2, 就下載11.8版本的 pip3 install torch torchvision torchaudio --index-url https://download.p…

字節Seed發布擴散語言模型,推理速度達2146 tokens/s,比同規模自回歸快5.4倍

用擴散模型寫代碼&#xff0c;不僅像開了倍速&#xff0c;改起來還特別靈活&#xff01;字節Seed最新發布擴散語言模型Seed Diffusion Preview&#xff0c;這款模型主要聚焦于代碼生成領域&#xff0c;它的特別之處在于采用了離散狀態擴散技術&#xff0c;在推理速度上表現出色…

海洋大地測量基準與水下導航系列之九我國海洋PNT最新技術進展(下)

三、海洋PNT技術裝備研發與工程化應用 1.海底基準裝備 研制了首批適應海洋環境的多型海底基準站裝備&#xff0c;在我國南海海域成功布設了定位精度優于0.25m的海底大地測量試驗基準網&#xff0c;實現了我國海底大地測量基準技術零的突破。基準方艙具備穩固、抗壓、防腐、防…

入門MicroPython+ESP32:安裝逗腦IDE及驅動

本篇文章將手把手帶大家入門MicroPython ESP32&#xff0c;重點介紹逗腦IDE的安裝過程以及相關驅動的安裝。 一、下載逗腦IDE 要開始使用逗腦IDE&#xff0c;首先需要從官網下載最新版本。請訪問以下網址進行下載&#xff1a;https://www.itprojects.cn/ide 下載時的界面大…

CentOS上部署Redis及其哨兵(Sentinel)模式

架構&#xff1a;說明我這里是偽集群的&#xff0c;redis 在同一臺機器&#xff0c;Sentinel 只有一個&#xff0c;也存在單點故障問題只能當作開發環境使用&#xff0c;要滿足生產至少是下面這種架構 ------------------- ------------------- ------------------- …

《軟件測試與質量控制》實驗報告二 單元測試

目 錄 一、實驗學時 二、實驗目的 三、實驗環境 &#xff08;一&#xff09;硬件環境&#xff1a; &#xff08;二&#xff09;軟件環境&#xff1a; 四、實驗內容 1、實驗方案&#xff1a; 2、實驗步驟&#xff1a; 3、設計思路&#xff1a; 1、安裝JUnit和Eclemma…

k8s模式部署PolarDB-X

當前文檔適配PolarDB-X V2.4.0 版本 環境描述&#xff1a; 部署機&#xff08;ops&#xff09;1x2.2x.2x8.116&#xff0c;部署機需要可以訪問互聯網。使用ansible進行部署&#xff0c;自行安裝ansible。需要部署兩個k8s集群&#xff0c;分別在其上安裝一個polardb-x集群。 部…

Flask + YARA-Python*實現文件掃描功能

以下是一個 完整的 Web API 示例&#xff0c;使用 Flask YARA-Python 實現文件掃描功能&#xff0c;支持上傳文件并返回 YARA 規則匹配結果。 ? 功能說明 提供一個 /scan 接口&#xff0c;支持文件上傳使用預加載的 YARA 規則進行掃描返回 JSON 格式的匹配結果支持多規則、可…

WinForm之NumericUpDown控件

NumericUpDown&#xff08;數字上下控件&#xff09;是 WinForm 中專門用于輸入和調整數值的控件&#xff0c;它結合了文本框和上下按鈕&#xff0c;用戶可通過點擊按鈕或直接輸入來設置數值&#xff0c;且能嚴格限制數值范圍&#xff08;最小值、最大值&#xff09;和步長&…

一文讀懂K8S kubectl 命令,運維小白必看!

一、Kubectl 是什么? Kubectl 是 Kubernetes(簡稱 K8S)集群的命令行工具,它就像是一把萬能鑰匙,讓我們可以與 K8S 集群進行交互,輕松管理集群中的各種資源,像是 Pod、Service、Deployment 等等。通過向 K8S API 發送 REST 請求,kubectl 實現了對集群資源的增刪改查等操…

髖臼方向的定義與測量-I

近期看到關于髖臼方向不同應用場景下的不同定義&#xff0c;覺得特別有意思&#xff0c;但是&#xff0c;原文是影印本&#xff0c;不太方便實用屏幕取詞翻譯&#xff0c;且一些專業術語也不太好理解。 因此&#xff0c;我將原文和翻譯整理了一些&#xff0c;不對的地方&#x…

Python爬蟲實戰:研究mahotas庫,構建圖像獲取及處理系統

一、引言 (一)研究背景 在信息爆炸的時代,圖像作為一種直觀、豐富的信息載體,其數量在互聯網上呈現指數級增長。這些圖像數據涵蓋了自然景觀、動植物、工業產品等多個領域,為模式識別、機器學習等研究提供了寶貴的數據源。特別是在植物學研究領域,葉片圖像包含了豐富的…