linux中標準I/O 文件I/O 及庫

????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 標準 I? / O

?

fopen() 函數打開文件的方式

?

r / rb 只讀 文件必須存在

r+ / r+b 讀寫 文件必須存在

w / wb 只寫 文件存在則長度清零 不存在則創建

w+ / w+b 讀寫 其他 同w

a / ab 同w 且寫入的數據會被追加到文件末尾

a+ / a+b 讀寫 數據在文件末尾追加 其他同a

?

diff -ruN +第一個文件 +第二個文件 測試文件復制成功與否???

?

?

fgetc / fput 可操作文本文件和二進制文件 效率較低

fgets / fputs 只能操作文本文件(原因是當讀取到0 默認為終止符) 效率較高

?

fread / fwrite 推薦使用

?

fllush(FILE *stream) 強制刷新緩存區

ftell (FILE *stream) 返回當前流

的位置

fseek(FILE *stream, long offset, int whence) 設定流的位置 成功則返回0

whence 參數的設定 三個宏 SEEK_SET / SEEK_CUR / SEEK_END 分別是文件的起始 當前和結尾位置

offset參數是偏移量

?

#nclude <errno.h>

ferror(FILE *stream) 流是否出錯 有錯返回1 否則返回0

feof(FILE *stream) 返回1表示文件已經到末尾 否則返回0

?

#include <string.h>

fprintf(FILE *stream, const char *fmt......)

ps :把內容寫入文件

sprintf(char *s, const char *fmt.....)

ps: 把內容寫入緩沖區

?

sleep()程序休眠 需要添加頭文件 #include <unistd.h>

?

#include <time.h>

time(time *t) 獲取當前時間 秒為單位

localltime()

?

使用時

time_t t;

struct tm *tp;

?

time(&t);

tp = localtime(&t);

tp->tm_year,tp->tm_mon, tp->tm_mday, tp->tm-hour , tp->tm_min, tp->tm_sec

?

char ctime(const time_t *timer) 獲取時間 返回一個字符串 內容分別是 星期幾(英語單詞) 月份(英語單詞) 一月中的第幾天 時分秒 年份

time_t t;

printf("%s", ctime(&t));

#include <fcntl.h>

int open(const char *path, int oflag,...) 用來打開和創建一個文件 成功則返回文件描述符 失敗返回EOF 可以是兩個參數 也可以是三個參數 兩個參數是打開文件 三個參數是創建文件(多出的參數是用來設置文件權限的)

第二個參數可選項:

O_RDONLY:只讀的方式打開文件

O_WRONLY:只寫的方式打開文件

O_RDWR:讀寫的方式打開文件

只能選一個

?

O_CREAT: 如果文件不存在就創建一個 且需要通過第三個參數設置文件權限

O_EXCL: 如果使用O_CREAT時 文件存在 則這個會返回錯誤信息 作用是判斷文件是否存在

O_TRUNC:如果文件存在 則刪除原有數據

O_APPEND:使用這個參數 寫入的方式都會被追加到文件尾部

?

第三個參數 文件權限 以八進制數表示

?

pS:

if((fd == open("1.txt", O_RDWR | O_CREAT | O_EXCL, 0666)) < 0)

{

if(erron == EEXIST) 通過對全局變量進行判斷 可是錯誤原因

perror("exist error");//文件存在才發生的錯誤

else

perror("other error ");

}

?

頭文件 #include <unistd.h>

int close(int fd) 關閉文件 成功返回0 失敗返回EOF

?

頭文件#include <unsitd.h>

ssize_t read(int fd ,void *buf, size_t count) 成功則返回實際讀取到的字節數 失敗則返回EOF

讀到末尾返回0

?

#include <unistd.h>

ssize_t write(int fd, void *buf, size_t count) 成功返回實際寫入的字節 失敗返回EOF

count 不應超過buf大小

?

#include <unistd.h>

off_t lseek(int fd , off_t offset , intt whence)

成功返回文件當前讀寫位置 出錯返回EOF

?

?????????????????????????????????????????????????????????? 文件I/O

?

打開目錄文件函數

#include <dirent.h>

DIR *opendir(const char *name)

?

讀取目錄文件函數

#include <dirent.h>

struct dirent *readdir(DIR *dirp)

?

成功則返回一個目錄流下的一個目錄項 到末尾或者出錯會返回NULL

?

關閉目錄文件函數

#include <dirent.h>

int closedir(DIR *dirp)

修改文件權限

?

#include <sys/stat.h>

int chmod(const char *path, mode_t mode)

int fchmod(int fd, mode_t mode)

成功返回0 錯誤返回EOF

只有root用戶才有權限修改文件權限

?

獲取文件屬性

#include <sys/stat.h>

int stat(const char *path, struct stat *buf)

int lstat(const char *path, struct stat *buf)

int fstat(int fd, struct stat *buf)

成功返回0 錯誤返回EOF

?

stat()是獲取目標文件屬性

lstat() 是獲取鏈接文件屬性

?

struct stat結構體的一些屬性

?

mode_t st_mode 類型和訪問權限

uid_t st_uid 所有者的ID

uid_t st_gid 用戶組ID

off_t st_size 文件大小

time_t st_mtime 最后修改時間

?

?

????????????????????????????????????????????????????????????????????? 靜態庫

?

生成靜態庫

ar crs lib+filename.a filename.o

?

查看庫中函數情況

nm lib+filefilename.a

?

怎么給一個程序鏈接一個庫

設測試程序為 test.c

gcc -o test test.c -L+庫的路徑 -l+庫文件名稱

?

????????????????????????????????????????????????????????????? 共享庫

?

生成共享庫

gcc -c fPIC filename01.c filename02.c -Wall

gcc -shared -o libcommon.so.1 filename01.o filename.o

數字是版本

為共享庫文件創建鏈接文件

ln -s libcommon.so.1 libcommon.so

?

測試

gcc -o test test.c -L+庫的路徑 -l+庫文件名稱

默認鏈接共享庫 如果想優先鏈接靜態庫 在后面加 -static

?

讓系統找到共享庫

?

1. 在環境變量中添加庫的路徑

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:+庫的路徑

?

2.把庫都復制到/lib 或/user/lib)

3.添加到/etc/ld.so.conf.d/*.conf文件 執行ldconfig刷新

?

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

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

相關文章

【C/C++ 匯編語言 Verilog】越界截斷——數據越界問題的多角度分析

0 前言 0.1 討論層級和范圍 討論層級 計算機底層&#xff1a;硬件層次與匯編指令層次信息與二進制位 討論范圍 信息的存儲與運算在匯編語言與Verilog HDL中的聯系與區別事實上&#xff0c;數據越界截斷問題&#xff0c;在計算機體系的任何層次&#xff0c;都可能發生&#xf…

進程常用指令 (從創建到回收 包含守護)

進程 常用命令及基本介紹 ps -ef 查看所有進程信息 &#xff08;一般需要配合管道使用&#xff09; ps aux 查看進程信息 且顯示進程狀態 狀態&#xff1a; R 運行態 正在運行或可運行 D 等待態 不可中斷 S 等待態 可中斷 T 停止態 Z 僵尸態 可追加&#xff1a; 前臺運…

【VS C++ 2010】查看內存的方法詳解

1 示例代碼 對于以下代碼&#xff1a; int main() {int a 100010001000;int b 100;cout << "a " << a << " " << &a << endl;cout << "b " << b << " " << &b…

二級C選擇知識點(部分)

二級C 循環隊列是隊列的順式存儲結構 雙向鏈表是鏈表的順式存儲結構 普通鏈表是鏈式存儲結構 非線性結構可采用順式也可采用鏈式 線性結構是只有一個根結點 每個節點最多有一個 帶鏈隊列可以不連續 且隊頭指針可大于也可小于隊尾指針 在鏈表中 雙向鏈表和循環鏈表都有兩個…

【匯編語言】上機實驗 win7/8/10 64位系統 進入32位DOS模式 實現dubug/edit/masm/link功能

1 軟件下載和安裝 下載并安裝DOSBox軟件&#xff0c;注意&#xff0c;不要裝在C盤上&#xff0c;裝在其他盤上 【備注】軟件直接百度搜索即可下載Debug.exe文件 【備注】百度搜索“Debug 64位 下載” 對于下載后得到的debug.exe文件 將這個文件拷貝到磁盤根目錄下&#xff0c…

ntohs(), ntohl() , htons(), htonl(), inet_ntoa(), inet_pton(), atoi()匯總

在C/C寫網絡程序的時候&#xff0c;往往會遇到字節的網絡順序和主機順序的問題。這是就可能用到htons(), ntohl(), ntohs()&#xff0c;htons()這4個函數。 網絡字節順序與本地字節順序之間的轉換函數&#xff1a; htonl()--"Host to Network Long" ntohl()--"N…

【數字邏輯 Verilog】全面剖析數據選擇器——從基礎到拓展,從理論到設計的實現,從表面到本質

0 前言 0.1 使用環境 EDA工具&#xff1a;Vivado 2017.4硬件描述語言&#xff1a;Verilog HDL 0.2 涉及知識 數字邏輯Verilog 1 基礎模塊&#xff1a;一位四選一數據選擇器 1.1 設計部分&#xff1a;層次建模 1.1.1 需求分析 設計一個一位的四選一數據選擇器&#xff0…

exec函數族(部分 最常用的)

進程調用exec函數族執行某個程序 進程當前程序被執行程序替換 讓父子進程執行不同的程序 父進程創建子進程 子進程調用exec函數族 父進程不受影響 #include<unistd.h> int execl(const char *path, const char *arg, ...) int execlp(const char *file, const cha…

【計算機網絡】手動配置hosts文件解決使用GitHub和Coursera網站加載慢/卡的問題

目錄0 前言1 打開hosts1.1 以管理員身份運行記事本1.2 打開hosts2 找到實際地址2.1 打開cmd2.2 找到網址3 替換地址3.1 修改hosts文件3.2 刷新4 后續內容的完善0 前言 本文是針對純小白讀者&#xff0c;沒有涉及到任何的專業知識&#xff0c;你只需要按照步驟操作即可。 同時…

【匯編語言】鏡像遷移能力之一通百通——由代碼段和CS:IP的原理,掌握一類寄存器的使用

0 前言 你應該知道8086CPU的物理地址形成方式及其原理&#xff0c;才能完成本文的學習。 1 內存的分段 對于內存&#xff0c;人們人為地將其劃分為一段一段的&#xff0c;比如代碼段和數據段等&#xff0c;特別注意&#xff0c;這是人為劃分的結果&#xff0c;方面人類使用&…

線程間通信————同步

同步 是指多個任務按照約定的先后次序 相互配合完成一件事情 信號量&#xff1a; 由信號量決定 線程是繼續執行 還是阻塞等待 信號量代表某種資源 其值表示系統中該資源的數量 信號量是一個受保護的量 只能通過特定的三種操作來訪問 初始化 P操作&#xff08;申請資源&…

【計算機組成原理 數字邏輯 Verilog】32位加法器的實現:支持整數的加減運算

目錄0 前言0.1 使用環境0.2 知識點0.3 注意事項1 建模&#xff1a;1位加法器1.1 構建基礎模型1.1.1 一位加法器1.1.1.1 科技黑箱&#xff1a;外部端口與功能1.1.1.2 揭秘黑箱&#xff1a;內部結構與模塊1.1.2 從頂層模塊提取低層模塊&#xff1a;取反功能選擇器1.1.2.1 科技黑箱…

線程間通信————互斥

互斥 臨界資源 一次只允許一個任務&#xff08;進程&#xff0c;線程)訪問的共享資源 臨界區 訪問臨界資源的代碼 互斥機制 mutex互斥鎖 任務訪問臨界資源前申請鎖 訪問完后釋放鎖 互斥鎖初始化 #include <pthread.h> int pthread_mutex_init(pthread_mutex_t *mute…

【Verilog HDL】門級描述 / 數據流描述 / 行為級描述——通過四選一多路選擇器,實現對于不同層級描述方式的整體性認知

目錄0 前言1 輸出端口的設計1.1 門級描述和數據流描述1.2 行為級描述2 三種描述方式的整體架構2.1 門級描述2.2 數據流描述2.3 行為級描述2.4 補充&#xff1a;獨立的語句2.5 小結3 理解三種描述方式的本質3.1 門級描述3.2 數據流描述3.3 行為級描述4 理解不同抽象層級描述方式…

線程創建-結束-回收 教程

ps aux -L 查看線程信息 且顯示進程狀態 使用進程的缺點: 進程切換 系統開銷較大 開銷大的原因 &#xff1a;切換時需要頻繁刷新 cache(類似于緩沖區) 和TLB linux不區分線程 進程 線程其實也屬于進程 只不過是特殊的進程 是一種可以共享地址空間的進程 使用線程的優點&#x…

【匯編語言】匯編實驗IDE(集成開發環境):RadASM的安裝和使用說明

0 前言 本文適合8086CPU的指令集。 對于重要的專業基礎課程&#xff0c;匯編語言&#xff0c;做實驗是必不可少的&#xff0c;但是由于匯編語言本身的缺陷&#xff0c;現代計算機并不能直接運行匯編語言程序&#xff0c;因此&#xff0c;一般老師會要求我們 使用虛擬機&…

【匯編語言】理解8086CPU中,不同類型的寄存器和匯編指令規則的聯系(會繼續更新)

0 前言 你是否因為匯編指令繁雜的規則而苦惱呢&#xff1f;作者本人也很煩&#xff0c;因為往往教材中只告訴我們規則&#xff0c;卻不告訴我們為什么&#xff0c;沒有原因就直接記憶&#xff0c;負擔太大&#xff0c;后期靈活運用也增添阻力&#xff0c;因此&#xff0c;我經…

System V IPC之信號燈

信號燈也叫信號量 用于進程/線程同步或互斥的機制 信號燈的類型 1.Posix 無名信號燈 2.Posix 有名信號燈 3.System V 信號燈 信號燈的含義 計數信號燈&#xff08;1和2都是&#xff09; System V信號燈是一個或多個計數信號燈的集合&#xff08;可操作集合中的多個信號燈&…

【VS 2017 C語言 匯編語言】如何使用VS 2017,通過反匯編查看C語言代碼對應的32位x86匯編語言 VS 2017單步調試的使用

0 前言 本文適用于VS的大多數版本&#xff0c;本文以VS 2017為例進行講解。 1 編輯C語言代碼 首先&#xff0c;在VS編譯器中&#xff0c;創建項目&#xff0c;敲一段C語言代碼&#xff0c;這個過程不解釋了&#xff0c;如果不會請百度。 #include <stdio.h> #include…

System V IPC之共享內存

共享內存是一種最為高效的進程間通信方式&#xff0c;進程可以直接讀寫內存&#xff0c; 而不需要任何數據的拷貝 共享內存在內核空間創建&#xff0c; 可以被進程映射到用戶空間訪問 由于多個進程可同時訪問共享內存 &#xff0c; 因此需要同步和互斥機制配合使用 共享內存的使…