Linux文件

目錄

一、基本概念

二、研究進程和被打開文件的關系

(一)w方式

(二)a方式

三、認識系統接口,操作文件

(一)認識文件描述符

(二)舉例

(三)理解文件


一、基本概念

1、所有對文件的操作

  • a、對內容操作
  • b、對屬性操作

2、內容是數據,屬性也是數據——存儲文件,必須既存儲內容,又存放數據

  • 此處的文件,默認就是在磁盤上的文件,加載磁盤上的文件,一定會涉及訪問磁盤設備(由操作系統來做)

3、我們要訪問一個文件的時候,都是要把這個文件先打開

  • 訪問的本質:進程要訪問一個文件
  • 打開后本質是:將文件加載到內存

4、一個進程可以打開多個文件嗎?多個進程可以打開多個文件嗎?

  • 加載到內存,被打開的文件,可能會存在多個
  • 進程:打開的文件 = 1 :n(1)

5、根據1和4,操作系統在運行中,可能打開很多個文件,操作系統要不要管理打開的文件呢???需要,如何管理???先描述后組織

?

6、文件按照是否被打開,分成:被打開的文件(在內存),沒有被打開的文件(在磁盤中

二、研究進程和被打開文件的關系

(一)w方式

  • w:以寫的方式打開,如果文件不存在就創建它?
#include<stdio.h>    
int main()    
{    FILE *fp=fopen("log.txt","w");    if(NULL == fp)    {    perror("fopen");    return 1;    }    const char*msg = "hello world\n";    int cnt = 10;    while(cnt)    {    fputs(msg, fp);    cnt--;    }    fclose(fp);    return 0;                                                                                                                                    
}

(二)a方式

  • a:也是寫入,從文件結尾處開始寫入,不會清空文件,是追加
#include<stdio.h>    
int main()    
{    FILE *fp=fopen("log.txt","a");    if(NULL == fp)    {    perror("fopen");    return 1;    }    const char *msg = "message.txt\n";    fputs(msg,fp);                                                                                                                               return 0;    
} 

?

?

三、認識系統接口,操作文件

man 2 open
NAMEopen, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);int creat(const char *pathname, mode_t mode);
  • pathname 這是一個字符串,指定要打開或創建的文件的路徑名。它可以是文件的相對路徑或絕對路徑。

  • flags 這是一個整數參數,表示打開文件的方式和行為。它可以是以下幾個常見標志的組合:

    • O_RDONLY:只讀方式打開文件。
    • O_WRONLY:只寫方式打開文件。
    • O_RDWR:讀寫方式打開文件。
    • O_CREAT:如果文件不存在,則創建文件
    • O_APPEND:在文件末尾追加內容而不覆蓋原有內容。
    • O_TRUNC:如果文件存在,并且以寫入方式打開,那么清空文件內容。
    • O_EXCL:與O_CREAT一同使用時,如果文件存在則返回錯誤。
  • mode 這是一個權限參數,僅在使用O_CREAT標志時才需要提供。它定義了新創建文件的權限。通常使用八進制表示,比如 0644 表示文件所有者具有讀寫權限,其他用戶只有讀權限。

  • 返回值:返回一個文件描述符(fd),如果出現錯誤則返回-1

(一)認識文件描述符

#include<stdio.h>    #define print1  1         //0001    
#define print2 (1<<1)     //0010    
#define print3 (1<<2)     //0100    
#define print4 (1<<3)     //1000    void print(int flags)    
{    if(flags & print1) printf("hello 1\n"); //檢查 flags 中是否包含 print1 對應的標志位if(flags & print2) printf("hello 2\n");    if(flags & print3) printf("hello 3\n");    if(flags & print4) printf("hello 4\n");    else printf("None\n");    
}    
int main()    
{    print(print1); //輸出了 hello 1,因為 print1 代表的標志位被設置 printf("------------\n");    print(print1|print2);//輸出了 hello 1 和 hello 2,因為 print1 和 print2 的標志位都被設置 printf("------------\n");    print(print1|print2 | print3); printf("------------\n");    print(print3|print4);    printf("------------\n");                                                                                                                    print(print4);    return 0;    
}

?

(二)舉例

#include <stdio.h>    
#include <unistd.h>//close的頭文件    
#include <string.h>//strlen的頭文件    
//下面三個是open的頭文件    
#include <sys/types.h>    
#include <sys/stat.h>    
#include <fcntl.h>    int main()    
{    umask(0);//更改掩碼    int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC, 0666);    if(fd < 0)    {    perror("open");    return 1;    }    const char *msg="aaaaa";    write(fd,msg,strlen(msg));    close(fd);    return 0;    
} 

?

?

(三)理解文件

?

?

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

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

相關文章

2023年中國油墨樹脂主要環節、產量及市場規模分析[圖]

油墨樹脂是指用于油墨制造中的一種高分子材料&#xff0c;主要用于改善油墨的粘性、流動性、光澤度和耐磨性等性能。其主要成分為合成樹脂&#xff0c;如聚酯、聚酰胺、聚丙烯酸酯等。油墨樹脂在油墨制造中的應用非常廣泛&#xff0c;可以用于各種類型的油墨&#xff0c;包括印…

github訪問不了問題

git clone github上的項目的時候&#xff0c;不是訪問不了&#xff0c;就是克隆過程被中斷了 最近找到一個代理&#xff0c;從代理那里clone而不是github上 GitHub代理 – 初果編程

python BDD 的相關概念

在Python 語言中進行BDD的規格和測試文件的編寫的時候&#xff0c;常常會遇到下面的概念&#xff1a; Fixture : 測試設施。設定測試環境的預設狀態或值的機制。Background&#xff1a; 背景。所有場景的公共部分。Scenario&#xff1a; 場景。Given &#xff1a; 前置條件Whe…

centos7 安裝node.js,不用wget也不用解壓文件

更新系統&#xff1a;首先&#xff0c;更新系統的軟件包列表和已安裝的軟件包。在終端中以root用戶或具有sudo權限的用戶身份運行以下命令&#xff1a; sudo yum update添加Node.js源&#xff1a;CentOS 7默認的軟件倉庫中可能不包含最新的Node.js版本。因此&#xff0c;我們需…

[leetcode 數位運算] 2939. 最大異或乘積 M

給你三個整數 a &#xff0c;b 和 n &#xff0c;請你返回 (a XOR x) * (b XOR x) 的 最大值 且 x 需要滿足 0 < x < 2n。 由于答案可能會很大&#xff0c;返回它對 109 7 取余 后的結果。 注意&#xff0c;XOR 是按位異或操作。 示例 1&#xff1a; 輸入&#xff1…

git中的分支管理:git branch,git checkout,解決git中的分支沖突的方法【Git學習三】

&#x1f601; 作者簡介&#xff1a;一名大四的學生&#xff0c;致力學習前端開發技術 ??個人主頁&#xff1a;夜宵餑餑的主頁 ? 系列專欄&#xff1a;Git等軟件工具技術的使用 &#x1f450;學習格言&#xff1a;成功不是終點&#xff0c;失敗也并非末日&#xff0c;最重要…

vue2 識別頁面參數中的html

在Vue 2中&#xff0c;你可以使用v-html指令來識別頁面參數中的HTML內容。v-html指令允許你將HTML代碼作為Vue模板的一部分進行渲染。 以下是一個示例&#xff0c;演示了如何在Vue 2中使用v-html指令來識別頁面參數中的HTML內容&#xff1a; <template><div v-html&…

C語言計算一個數的 n 次方

1、要求 計算一個數的 n 次方&#xff0c;例如: 2 3&#xff0c;其中 2 為基數&#xff0c;3 為指數。 2、使用for循環 #include <stdio.h> int main(){int i,j,k,l1;printf("請輸入基數和指數&#xff1a;");scanf("%d %d",&i,&j);for(k…

雙流網絡論文精讀筆記

精讀視頻&#xff1a;雙流網絡論文逐段精讀【論文精讀】_嗶哩嗶哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 傳統的神經網絡難以學習到物體的運動信息&#xff0c;雙流網絡則通過光流將物體運動信息抽取出來再傳遞給神經網絡 給模型提供…

Golang 中的良好代碼與糟糕代碼

最近&#xff0c;有人要求我詳細解釋在 Golang 中什么是好的代碼和壞的代碼。我覺得這個練習非常有趣。實際上&#xff0c;足夠有趣以至于我寫了一篇關于這個話題的文章。為了說明我的回答&#xff0c;我選擇了我在空中交通管理&#xff08;ATM&#xff09;領域遇到的一個具體用…

linux部署jar 常見問題

1.java -jar xxx.jar no main manifest attribute, in xxx.jar 一.no main manifest attribute, in xxx.jar 在pom.xml文件中加入&#xff1a; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifac…

C語言每日一題(35)有效的括號

力扣網 20 有效的括號 題目描述 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右…

CountDownLatch和CyclicBarrier

JUC&#xff08;Java.util.concurrent&#xff09;是Java 5中引入的一個并發編程庫&#xff0c;它包含了許多用于多線程處理的工具類和接口。JUC主要提供了以下特性&#xff1a; 線程池&#xff1a;線程池可以提高線程的使用效率&#xff0c;避免頻繁地創建和銷毀線程&#xff…

Kotlin學習——hello kotlin 函數function 變量 類 + 泛型 + 繼承

Kotlin 是一門現代但已成熟的編程語言&#xff0c;旨在讓開發人員更幸福快樂。 它簡潔、安全、可與 Java 及其他語言互操作&#xff0c;并提供了多種方式在多個平臺間復用代碼&#xff0c;以實現高效編程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Docker Swarm總結(2/3)

目錄 8、service 操作 8.1 task 伸縮 8.2 task 容錯 8.3 服務刪除 8.4 滾動更新 8.5 更新回滾 9、service 全局部署模式 9.1 環境變更 9.2 創建 service 9.3 task 伸縮 10、overlay 網絡 10.1 測試環境 1搭建 10.2 overlay 網絡概述 10.3 docker_gwbridg 網絡基礎…

【DevOps】Git 圖文詳解(八):后悔藥 - 撤銷變更

Git 圖文詳解&#xff08;八&#xff09;&#xff1a;后悔藥 - 撤銷變更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤銷提交 revert4.checkout / reset / revert 總結 發現寫錯了要回退怎么辦&#xff1f;看看下面幾種后悔指令吧&#xff01; ? 還沒提交的怎么撤銷&#x…

Visual Studio連接unity編輯器_unity基礎開發教程

Visual Studio連接unity編輯器 問題描述解決方法意外情況 問題描述 當我們在unity編輯器中打開C#腳本的時候發現Visual Studio沒有連接unity編輯器&#xff0c;在編寫代碼的時候也沒有unity關鍵字的提醒。 簡單來說就是敲代碼沒有代碼提示。 解決方法 這時候需要在unity中進行…

Qt實現圖片旋轉的幾種方式(全)

目錄 一、用手搓&#xff08;QPainter&#xff09; 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 實現圖像旋轉 四、利用 OpenGL 實現旋轉圖像的效果有幾種不同的方法&#xff0c;其中常見的包括&#xff1a; 手動旋轉繪制&#xff1a; 使用 QPaint…

網絡吞吐量 公網帶寬有關嗎?

環境&#xff1a; 華為交換機 深信服防火墻 問題描述&#xff1a; 網絡吞吐量 公網帶寬有關嗎&#xff1f; 解決方案&#xff1a; 網絡吞吐量網絡吞吐量是指在特定時間內通過網絡傳輸的數據量。它衡量了網絡設備&#xff08;如防火墻、交換機、路由器&#xff09;或網絡連…

終端仿真軟件 SecureCRT v9.4.2

SecureCRT是一款終端仿真軟件&#xff0c;它提供了類似于Telnet和SSH等協議的遠程訪問功能。SecureCRT專門為網絡管理員、系統管理員和其他需要保密訪問網絡設備的用戶設計。 SecureCRT具有以下特點&#xff1a; 安全性&#xff1a;SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…