Linux文件編程(2)

文件打開創建補充

(1)O_EXCL
O_EXCL和O_CREAT配合使用
若文件不存在則創建文件
若文件存在則返回-1
代碼演示

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{int fd;fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);if(fd==-1){printf("file exit\n");}return 0;
}

(2)O_APPEND
每次寫的時候都加到文件尾端,若沒有O_APPEND,則寫入的東西會把原來文件中的數據覆蓋掉
代碼演示

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";//將要寫入文件的內容fd=open("./file1",O_RDWR|O_APPEND);int n_write=write(fd,buf,strlen(buf));printf("write %d\n ",n_write);close(fd);return 0;
}

(3)O_TRUNC
如果這個文件中本來是有內容的,而且為只讀或只寫成功打開,則將其長度截短為0。
代碼演示

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";fd=open("./file1",O_RDWR|O_TRUNC);int n_write=write(fd,buf,strlen(buf));printf("write %d\n ",n_write);close(fd);return 0;}

(4)creat()函數創建文件

 int creat(const char *pathname, mode_t mode);

pathname:要創建的文件名(包含路徑,當前路徑)
mode:創建模式 //可讀可寫可執行
文件的返回值也是文件描述符

宏表示數字 和 含義
S_IRUSR4 ------------------可讀
S_IWUSR2-------------------可寫
S_IXUSR1----------------可執行
S_IRWXU7----可讀可寫可執行

代碼演示

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";fd=creat("/home/CLC/file1",S_IRWXU);return 0;
}

文件操作原理簡述
文件描述符:
????????1、對于內核而言,所有打開文件都由文件描述符引用。文件描述符是一個非負整數。當打開一個現存文件或者創建一個新文件時,內核向進程返回一個文件描述符。當讀寫一個文件時,用open和creat返回的文件描述符標識該文件,將其作為參數傳遞給read和write.按照慣例,UNIX shel I使用文件描述符0與進程的標準輸入相結合,文件描述符1與標準輸出相結合,文件描述符2與標準錯誤輸出相結合。STDIN _FILENO、STDOUT_FILENO、 STDERR_FILENO這幾個宏代替了0、1、2這幾個魔數,0、1、2是linux系統默認的文件描述符。
????????2、文件描述符,這個數字在一個進程中表示一個特定含義,當我們open一個文件時,操作系統在內存中構建了一些數據結構來表示這個動態文件,然后返回給應用程序一個數字作為文件描述符,這個數字就和我們內存中維護的這個動態文件的這些數據結構綁定上了,以后我們應用程序如果要操作這個動態文件,只需要用這個文件描述符區分。
????????3、文件描述符的作用域就是當前進程,出了這個進程文件描述符就沒有意義了。open函數打開文件,打開成功返回一個文件描述符,打開失敗,返回-1。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>#include <stdlib.h>
int main()
{int fd;char readbuf[128];int n_read=read(0,readbuf,5);//從標準輸入讀取5個字節到readbuf中int n_write=write(1,readbuf,strlen(readbuf));//將readbuf中的內容標準輸出printf("done! \n");
}

總結
文件編程步驟:
1、打開或創建文件
2、讀取文件或寫入文件
3、關閉文件
在這里插入圖片描述

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

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

相關文章

IT技術人員必須思考的幾個問題

1.搞IT的是屌絲、碼農、程序猿?人們提到IT人的時候&#xff0c;總會想到他們呆板、不解風情&#xff0c;專注于IT技術&#xff0c;就算性感的美女躺在旁邊也無動于衷。事實真的是這樣嗎?雖說不能完全否定有這樣的情況存在&#xff0c;但這是IT人普遍的特點嗎?而其它行業也有…

37個JavaScript基本面試問題和解答

https://www.zcfy.cc/article/37-essential-javascript-interview-questions-and-answers1、使用typeof bar “object”來確定bar是否是一個對象時有什么潛在的缺陷&#xff1f;這個陷阱如何避免&#xff1f;盡管typeof bar “object”是檢查bar是否是對象的可靠方法&#xff0…

封裝cookie.js、EventUtil.js、

最近學習了javascript&#xff0c;封裝好的東西看起來舒服&#xff0c;以備需要的時候拉出來&#xff0c;jquery對javascript做了很好的封裝&#xff01;以后會多用jquery多些var CookieUtil {get: function (name){var cookieName encodeURIComponent(name) "",c…

實現linux cp 命令和修改配置文件

cp指令用來代碼的拷貝 以下由文件編程代碼實現 代碼演示 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main(int argc…

最實用前端開發框架對比評測

現在&#xff0c;各種開發框架層出不窮&#xff0c;但是&#xff0c;真正的精品卻為數不多。今天我們根據Github上的流行程度整理了2014年最受歡迎的5個前端開發框架&#xff0c;并進行對比說明&#xff0c;希望幫助有需要的朋友選擇合適自己的前端框架。1. BootstrapBootstrap…

HBase1.0.0 實現數據增刪查

HBase1.0.0 即Hadoop 2.6 采用maven 的方式實現HBase數據簡單操作 import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.a…

linux 寫結構體到文件

將整數寫入到文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main() {int fd;int data100;int data20;fdopen("…

程序員常訪問的國外技術交流網站

技術人員經常會在各種技術交流社區游逛&#xff0c;大家互相學習、交流、分享、幫助。互聯網拉近了地球人的距離&#xff0c;讓全世界的技術人員可以聚集在一起分享交流。當然因為多方面原因&#xff0c;通常最新最權威的技術知識傳到國內存在一定“時差”。本文將給大家分享技…

標準C庫對文件操作的引入

modeopen和fopen的區別 fopen、fread、fwrite的使用 &#xff08;1&#xff09;fopen FILE *fopen(const char *path, const char *mode);path&#xff1a;文件路徑 mode&#xff1a;以什么權限打開&#xff0c;要用雙引號 它的返回值并不是文件描述符 若失敗返回NULL 若操作成…

轉載愛哥自定義View系列--Paint詳解

上圖是paint中的各種set方法 這些屬性大多我們都可以見名知意&#xff0c;很好理解&#xff0c;即便如此&#xff0c;哥還是帶大家過一遍逐個剖析其用法&#xff0c;其中會不定穿插各種繪圖類比如Canvas、Xfermode、ColorFilter等等的用法。 set(Paint src) 顧名思義為當前畫筆…

只有程序員才懂這些黑色幽默!

也是機緣巧合&#xff0c;讓我一個之前工作從未接觸過程序員的人&#xff0c;現在成天和程序員打交道&#xff0c;要知道&#xff0c;不懂技術&#xff0c;往往他們想和你幽默的搞笑一下&#xff0c;未必能讀懂。都說程序員情商低&#xff0c;不愛說話&#xff0c;比較悶騷。可…

tiny4412 linux+qtopia nfs網絡文件系統的掛載

1,首先確定uboot啟動內核的bootargs參數 Linux-CommandLine root/dev/nfs nfsroot192.168.1.131:/home/tiny4412/rootfs_qtopia_qt4 ip192.168.1.230:192.168.1.131:192.168.1.1:255.255.255.0::eth0:off rootfstypenfs consolettySAC0,115200 init/linuxrc ctp2 skipcaliy uh…

Linux 進程、父進程、子進程

進程和程序的區別 一、 進程是動態的&#xff0c;程序是靜態的&#xff1a;程序是有序代碼的集合&#xff0c;進程是程序的執行。進程有核心態/用戶態。 二、 進程是暫時的&#xff0c;程序是永久的&#xff1b;進程是一個狀態變化的過程&#xff0c;程序可以長久保存 三、進…

幾款開源富文本編輯器優缺點比較

1、百度UEditor 優點&#xff1a;插件多&#xff0c;基本滿足各種需求&#xff0c;類似貼吧中的回復界面。缺點&#xff1a;不再維護&#xff0c;文檔極少&#xff0c;使用并不普遍&#xff0c;圖片只能上傳到本地服務器&#xff0c;如果需要上傳到其他服務器需要改動源碼&…

C程序的儲存空間是如何分配?

可執行程序包括BSS段、數據段、代碼段。 在類UNIX系統下可使用size命令查看可執行文件的段大小信息。如size a.out&#xff1a; ~/Desktop/MyC$ size a.outtext data bss dec hex filename1672 600 8 2280 8e8 a.out1.數據段存放已初始化的全…

詳細講解Android的網絡通信(HttpUrlConnection和HttpClient)

前言&#xff0c;Android的網絡通信的方式有兩種&#xff1a;使用Socket或者HTTP&#xff0c;今天這一篇我們詳細講解使用HTTP實現的網絡通信&#xff0c;HTTP又包括兩種方式編程方式&#xff1a; &#xff08;1&#xff09;HttpUrlConnection&#xff1b; &#xff08;2&#…

常見通信協議HTTP、TCP、UDP的簡單介紹

TCP HTTP UDP:都是通信協議&#xff0c;也就是通信時所遵守的規則&#xff0c;只有雙方按照這個規則“說話”&#xff0c;對方才能理解或為之服務。TCP HTTP UDP三者的關系:TCP/IP是個協議組&#xff0c;可分為四個層次&#xff1a;網絡接口層、網絡層、傳輸層和應用層…

創建進程相關函數

fork函數 pid_t fork(void); fork函數調用成功&#xff0c; 返回兩次 在fork函數執行完畢后 如果創建新進程成功&#xff0c;則出現兩個進程 一個是子進程&#xff0c;一個是父進程 在子進程中&#xff0c;fork函數返回0 在父進程中&#xff0c;fork返回新創建子進程的進程ID…

實現Windows和Linux之間的文件共享

一、windows 向linux共享文件(這里都是以win10和ubuntu為例)首先&#xff0c;打開網絡共享中心。如圖1圖1打開更改高級共享設置&#xff08;圖2&#xff09;圖 2選擇啟用網絡發現以及啟用文件和打印機共享&#xff0c;然后點擊保存更改。接著&#xff0c;選擇你要共享的文件夾&…

雞啄米MFC教程筆記之七:對話框:為控件添加消息處理函數

MFC為對話框和控件等定義了諸多消息&#xff0c;我們對它們操作時會觸發消息&#xff0c;這些消息最終由消息處理函數處理。比如我們點擊按鈕時就會產生BN_CLICKED消息&#xff0c;修改編輯框內容時會產生EN_CHANGE消息等。一般為了讓某種操作達到效果&#xff0c;我們只需要實…