日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux环境编程--文件基本操作

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux环境编程--文件基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 下目錄是/這樣的? 而windows是\怎么記呢?\和w是不是一樣的反向?所以Linux的目錄就是反的反向,好記了。

一:open函數

名稱:

open

目標:

打開一個文件。

頭文件:

#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);

參數:

pathname??? 文件名

????

flags????????? 打開模式

返回值:

-1???? 遇到錯誤

    

int??? 打開成功,返回文件描述符。

這個系統調用在進程和文件之間建立一條連接,這個連接被稱為文件描述符,它就像一條由進程通向內核的管道。

要打開一個文件,必須指定文件名和打開模式,有3種打開模式:只讀,只寫,可讀可寫,分別對應于O_RDONLY,O_WRONLY,O_RDWR,這在頭文件/usr/include/fcntl.h中有定義。

?????? 打開文件是內核提供的服務,如果在打開過程中內核檢測到任何錯誤,這個系統調用就會返回-1。錯誤的類型是各種各樣的,如:要打開的文件不存在。即使文件存在可能因為權限不夠而無法打開,在open的聯機幫助中列出了各種可能的錯誤,大家可以看看。

?????? UNIX允許一個文件被多個進程訪問,也就是說當一個文件被一個進程打開后,這個文件還可以被其它進程打開。

????? 如果文件被順利打開內核會返回一個正整數的值,這個數值就叫文件描述符,文件描述符是是一個簡單的整數,用以標明每一個被進程所打開的文件,描述符0代表標準輸出,對應的宏是 STDOUT_FILENO,描述符1代表標準輸入,對應的宏為STDIN_FILENO,描述符2代表標準錯誤輸出,對應的宏為STDERR_FILENO,系統給進程分配描述符都是從3開始的,如果同時打開好幾個文件,它們所對應的的文件描述符是不同的,如果一個文件打開多次,對應的文件描述符也不相同。必須通過文件描述符對文件操作。下面的程序可以證明這一點。

?

二:read函數

名稱:

read

目標:

把數據讀到緩沖區。

頭文件:

#include < unistd.h>

函數原形:

ssize_t read(int fd, void *buf, size_t count)

參數:

fd?????? 文件描述符

?

buf????? 用來存放數據的目的緩沖區

?

count???? 要讀取的字節數

返回值:

-1?????? 遇到錯誤

    

numread? 成功關閉,返回所讀取的字節數目。

read這個系統調用請求內核從fd所指定的文件中讀取qty字節的數據,存放到buf所指定的內存空間中,內核如果成功地讀取了數據,就返回所讀取的字節數目。否則返回-1

當文件的字節數沒有你想要的那么多時,read就會判斷下一個數值是不是’\0’,如果是就停止讀取,然后退出。numread返回的是’\0’之前的字節數,也就是是原文件的字節數而不是你想讀的字節數。

?

三:close函數

名稱:

close

目標:

關閉一個文件。

頭文件:

#include < unistd.h>

函數原形:

int close(int fd)

參數:

fd??? 文件描述符

返回值:

-1???? 遇到錯誤

    

int??? 關閉成功,返回文件描述符。

?????? Close這個系統調用會關閉進程和文件fd之間的連接,如果關閉過程中出現錯誤,close返回-1,如:fd所指的文件并不存在。關閉成功則返回文件描述符。

代碼:?一個基本的打開文件,讀取,并關閉的例子

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
main()
{
int fd,size;
char s [ ]="Linux Programmer!\n",buffer[1024];fd=open("show_read.c",O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
close(fd);
printf("%s",buffer);
}


?四:craet函數

名稱:

creat

目標:

創建/重寫一個文件

頭文件:

#include <sys/types.h>

#include <stat.h>

#include < fcntl.h>

函數原形:

int creat(const char *pathname,mode_t mode)

參數:

pathname?? 文件名

?

mode????? 訪問模式

返回值:

-1???????? 遇到錯誤

    \

fd???????? 創建成功,返回文件描述符

?????? Creat告訴內核創建一個名為filename的文件,如果這個文件不存在,就創建它,如果已經存在,就把它的內容清空,把文件的長度設為0????

?????? 如果內核成功地創建了文件,那么文件的許可位(permission bits)被設置為由第二個參數mode所指定的值.如:

fd=creat(“addressbook”,0644);

?????? 創建一個名為addressbook的文件,如果文件不存在,那么文件的許可位被設為 rw-r-r—.

如果文件已存在它的內容會被清空。任一情況下,fd都會是指向addressbook的文件描述符。

?

五:write函數

名稱:

write

目標:

將內存中的數據寫入文件。

頭文件:

#include < unistd.h>

函數原形:

size_t write(int fd, const void *buf, size_t count)

參數:

fd?????? 文件描述符

?

buf????? 內存數據

?

count??? 要寫的字節數

返回值:

-1?????? 遇到錯誤

    

Num written? 成功寫入,返回寫入的字節數目。

在實際的寫入過程中,可能會出現寫入的字節數少于所要求的。這可能有兩個原因,第一是有的系統對文件的最大尺寸有限制,第二是磁盤空間接近滿了。在上述兩種情況下內核都會盡力把數據往文件中寫,并將實際寫入的字節數返回,所以調用write后都必須檢查返回值是否與要寫入的相同,如果不同就要采取相應的措施。

?????? 學完上面幾個系統調用,我們就可以自己編寫的cp命令了。它的基本思路是從原文件讀取數據寫入緩沖,再將緩沖的數據寫入目標文件。

?

代碼:新建一個文件并寫入內容

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
main()
{
int fd,size;
char s [ ]="Linux Programmer!\n",buffer[1024];char filename[]="newfile.txt";
fd=creat(filename,0644);
fd=open(filename,O_WRONLY|O_CREAT);
write(fd,s,sizeof(buffer));fd=open(filename,O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
close(fd);
printf("%s",buffer);}

總結

以上是生活随笔為你收集整理的Linux环境编程--文件基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。