1. 程式人生 > >linux函式程式碼操練----檔案操作篇------01open()函式

linux函式程式碼操練----檔案操作篇------01open()函式

檔案操作的前提是開啟檔案,open函式就是開啟檔案的一個函式,下面進行open函式的程式碼操練

基礎知識

open函式用來開啟一個檔案並且返回一個檔案描述符,其函式原型有兩個

①int open(const char* path,int oflags);
②int open(const char* path,int oflags,mode_t mode);

實驗內容

①利用open開啟一個檔案
②檔案開啟方式的探究
③O_CREATE引數下檔案許可權的探究

1.開啟一個名為test.txt的檔案

#include<stdio.h>
#include<fcntl.h>


#include<sys/types.h>
#include<sys/stat.h>
int main()
{
int ret;
ret=open("test.txt",O_RDONLY);
printf("%d\n",ret);
if(ret!=-1){
printf("open success!\n");
}
return 0;
}

上訴程式碼可以告訴我們
①實驗open函式必須使用的標頭檔案有
fcntl.h
sys/types.h
sys/stat.h
②open函式的第二個引數是開啟方式,這裡用的是隻讀方式開啟,經過實驗,不能對檔案進行寫操作。類似的開啟方式有:
O_RDONLY 以只讀的方式開啟,檔案不可進行寫操作


O_WRONLY
O_RDWR
O_APPEND
O_TRUNC
O_CREATE
O_EXCL

2.開啟方式的探究

①O_RDONLY

程式截圖
這裡寫圖片描述

執行截圖
這裡寫圖片描述
說明:
該程式用open函式開啟一個名為test.txt的空檔案,然後嘗試使用write函式向檔案中寫入內容失敗,而用read函式讀取檔案內容成功。實驗說明了O_RDONLY方式開啟檔案只可以讀取檔案內容不能寫入檔案內容。

②O_WRONLY
程式截圖
這裡寫圖片描述
執行截圖
這裡寫圖片描述
說明:
該程式用open函式開啟一個名為test.txt的空檔案,然後嘗試使用write函式向檔案中寫入內容成功,而用read函式讀取檔案內容失敗。實驗說明了O_WRONLY方式開啟檔案只可以寫入檔案內容不能讀取檔案內容。

③O_RDWR
程式截圖:
這裡寫圖片描述
執行截圖:
這裡寫圖片描述
說明:
該程式用open函式開啟一個名為test.txt的空檔案,然後嘗試使用write函式向檔案中寫入內容成功,用read函式讀取內容也成功。實驗說明了O_RDWR方式開啟檔案既可以寫入檔案內容也可以讀取檔案內容。

④O_APPEND
程式碼1
這裡寫圖片描述
執行結果
這裡寫圖片描述
說明
程式使用open函式以可讀可寫的方式開啟檔案test.txt,然後寫入1111,關閉檔案重複操作寫入2222,程式執行結束檢視檔案test.txt的內容發現檔案內容為2222.這說明寫入的內容發生了覆蓋,造成這種結果的原因是檔案每次預設從開始位置寫入內容。
下面使用O_APPEND函式進行操作
程式截圖
這裡寫圖片描述
執行結果
這裡寫圖片描述
說明
使用O_APPEND開啟檔案並向其中寫入內容,內容不會覆蓋原來的內容而是接著檔案尾寫內容。注意O_APPEND單獨作為引數無意義
⑤O_CREAT
程式截圖
這裡寫圖片描述
執行結果
這裡寫圖片描述
說明
利用O_CREAT開啟檔案,檔案不存在時則建立一個檔案,注意O_CREAT單獨使用時,如果檔案已經存在則開啟失敗
⑥O_TRUNC
程式截圖
這裡寫圖片描述
執行結果
這裡寫圖片描述
說明
使用O_TRUNC引數,檔案開啟後,內容被清空後再進行後面的操作。這裡寫圖片描述

O_CREAT引數下檔案許可權的探究

程式截圖
這裡寫圖片描述
執行結果
這裡寫圖片描述
說明
S_IWUSR 所有者寫許可權
S_IRUSR 所有者讀許可權
S_IXUSR 所有者執行許可權

S_IWGRP 所有組寫許可權
S_IRGRP 所有組讀許可權
S_IXGRP 所有組執行許可權

S_IWOTH 其他者寫許可權
S_IROTH其他者讀許可權
S_IXOTH其他者執行許可權
如果想賦予檔案多個許可權使用或操作講多個引數連線到一起

以上引數實際上是整數的巨集定義,所以其實可以直接傳入整數為檔案一次性賦予多個許可權。(實驗待定)
“Linux總共用5個數字來表示檔案的各種許可權:

第一位表示設定使用者ID;
第二位表示設定組ID;
第三位表示使用者自己的許可權位;
第四位表示組的許可權;
第五位表示其他人的許可權。
每個數字可以取1(執行許可權)、2(寫許可權)、4(讀許可權)、0(無)或者是這些值的和。
例如,要建立一個使用者可讀、可寫、可執行,其他使用者無許可權的檔案可以傳入
00700
程式截圖
這裡寫圖片描述
執行結果
這裡寫圖片描述

寫在後面
本函式的程式碼探究大概花了一個上午,包括自己寫程式碼和查詢資料,這既是一個探究的過程也是一個學習的過程,程式設計的很多東西只有經歷過親手實踐才會有體會,關於部落格中fail寫出fild這個錯誤真的很失敗,英語太爛了,見笑了各位讀者。

相關推薦

linux函式程式碼操練----檔案操作------01open()函式

檔案操作的前提是開啟檔案,open函式就是開啟檔案的一個函式,下面進行open函式的程式碼操練 基礎知識 open函式用來開啟一個檔案並且返回一個檔案描述符,其函式原型有兩個 ①int open(const char* path,int oflags)

linux函式程式碼操練---檔案操作-----printf系列函式

基礎知識 printf系列三個比較重要的函式分別是printf,fprintf,sprintf。 我們熟悉的是printf,他是標準輸出函式,也就是說他的輸出內容是顯示在螢幕上的,而fprintf則

linux函式程式碼操練---檔案操作----04lseek()函式

基礎知識 lseek對檔案描述符的指標位置進行設定。 函式原型 off_t lseek(int fildes,off_t offset,int wence); 實驗內容 ①利用SEEK_S

Linux C高階程式設計——檔案操作之庫函式

Linux C高階程式設計——檔案操作之庫函式 宗旨:技術的學習是有限的,分享的精神是無限的 ——為什麼要設計標準I/O庫? 直接使用API進行檔案訪問時,需要考慮許多細節問題 例如:read、write時,緩衝區的大小該如何確定,才能使效率最優 標準I/O庫封裝了諸多

Linux 下幾個檔案操作命令的程式碼實現

用 C 語言實現命令 cp、df、mkdir、rm、tac   本文章中的示例程式碼是在 CentOS 5.4 64 位環境下執行通過的,在其它 unix 系統上沒有測試過。 Linux 作業系統中的命令實際上是編譯好的可執行程式,比如說 ls 這個命令,這個檔案位於 /bin

linux函式程式碼操練---錯誤處理

基礎知識 strerror函式 char* strerror(int errnum); perror函式 void perror(const char* s); 將錯誤程式碼對映為字串 錯誤

Linux C的檔案操作及相關函式

一、Linux檔案的屬性及檔案的分類 二、檔案描述符的概念及作用 三、系統呼叫的概念 三、不帶快取的檔案I/O操作的相關函式 四、帶快取的檔案I/O操作的相關函式 一、Linux檔案的屬性 檔案的屬性: 我們在Gcc編譯器輸入“ ls  -al"指令時,除了有不同

C語言檔案操作標準庫函式Linux系統函式效率比較

我們都知道,C語言在UNIX/Linux系統下有一套系統呼叫(系統函式),比如檔案操作open()、close()、write()、read()等,而標準C語言的庫函式中也有一套對檔案的操作函式fopen()、fclose()、fwrite()、fread()等

Linux基礎-常用命令-檔案操作

Linux基礎 1、linux常用命令 1、tab 快速補全鍵(嚴格區分大小寫) 2、cd 進入指定的目錄 cd.. 回到上一級目錄 3、ls 檢視當前目錄下的所有目錄與檔名 4、touch 檔名 表示建立一個檔案 5、mkdir 目錄名 表示建立一個目錄 6、

檔案操作使用的函式

使用VS程式設計環境時應注意以下這些函式在使用的時候會出錯,為什麼吶,因為微軟坑唄,哈哈開玩笑,微軟自己在這些函式的基礎上做出新函式以此來避免一些錯誤,所以吶這些新函式裡面也多了要傳入的引數,但是感覺沒啥用。所以我們要停掉微軟的新函式才能更快的程式設計。有2種停掉的方法 1.在程式的開頭

檔案操作使用的函式(下)

拷貝檔案函式包含了很多檔案操作的函式。參考程式碼理解函式如何使用。 #include< stdio.h> #include<stdlib.h> #include< string.h> int main() { FILE *fp_from = NULL

[Linux]目錄許可權對檔案操作的影響

問題 我們常使用linux以下命令 cd 進入目錄 ls 列出目錄中的檔案 或者直接開啟目錄中的檔案 以上操作對於目錄許可權位的設定來說,是有一定迷惑性的,如表格所示   cd開啟目錄 ls列出檔案 操作目錄內檔案(讀/寫/執行)

程式碼審計——檔案操作漏洞概述

0x00 前言 如飢似渴的學習ing。 0x01 檔案包含漏洞概述 本地檔案包含是指只能包含本機檔案的檔案包含漏洞,大多出現在模組載入、模板載入和cache呼叫這些地方。 1.遠端檔案包含 可以包含遠端

Linux C高階程式設計——檔案操作之系統呼叫

Linux C高階程式設計檔案操作之系統呼叫 宗旨:技術的學習是有限的,分享的精神是無限的!         庫函式是一些完成特定功能的函式,一般由某個標準組織製作釋出,並形成一定的標準。使用庫函式編寫的函式一般可以應用於不同的平臺而不需要做任何修改,具有很好的可移植

linux下的CSV檔案操作

先介紹一下什麼是csv檔案,這是一種簡單的文字檔案,也被稱為逗號分隔值檔案。 主要是用於儲存簡單的資料,下面在weindows下用UE簡單生成一下檔案。 然後用excel開啟 這就是一個簡單的csv檔案,每個字元都是一個ANSI碼,圖中的第一行,1,2,3,4,5,7。

linux中常見的檔案操作命令

由於經常在linux釋出工程進行測試,所以要用到linux一些檔案操作命令,再此進行總結,以便以後忘記的時候檢視。 改變目錄:cd      回到使用者目錄 cd或者cd~ 檢視當前目錄:pwd 檢視目錄下的檔案的詳細資訊:ls -l /tmp(顯示的最近一次修改

Linux基本命令之檔案操作命令

目錄管理:ls ,cd, pwd,madir,rmdir,tree檔案管理:touch,stat,file,rm,cp,mv,nano,vi,vim日期時間:date,clock,hwclock,cal,ntpdate檢視文字:cat,tac,more,less,head,t

linux常用指令(檔案操作

touch -建立檔案語法:touch 檔名稱 touch aaa.txt:表示建立一個名為aaa的文字檔案vi -檢視、編輯檔案(使用者輸入vi +檔名,便可以進入vi模式進行檔案的檢視和編輯)命令模式: L:游標移至螢幕最後一行 space:游標右移一個字元 backs

linux程式程式碼操練---掃描目錄

基礎知識 opendir函式 DIR* opendir(const char* name); readdir struct dirent* readdir(DIR* dirp); telldi

Linux常用命令:檔案操作命令

Linux系統命令主要包括檔案操作、網路命令和效能命令,本文介紹常用檔案操作命令。 # 修改檔案屬性 ![](https://img2020.cnblogs.com/blog/2229336/202012/2229336-20201221223521969-1694389676.png) 檔案型別: - 普通