llinux檔案程式設計2

2021-08-03 00:23:38 字數 1337 閱讀 8272

本文通過乙個拷貝檔案的程式介紹下,linux訪問系統庫函式open close read write四個函式

1.先把完整程式貼上,在一步一步介紹程式流程。

#include

#include

#include

#include

#include

#define size 1000

int bytes_read,bytes_write;

char buf[size];

int main(int argc,char *argv)

if((fd1=open(argv[1],o_rdonly))<0)

if((fd2=open(argv[2],o_wronly|o_creat,0755))<0)

while(bytes_read=read(fd1,buf,size))}}

}close(fd1);

close(fd2);}

2:程式分析

2.1 首先進行引數檢查,總共三個引數,兩個檔案,把乙個檔案的資料的一部分拷貝到另乙個檔案中

if(argc!=3)

2.2 建立總體框架

開啟兩個檔案,乙個檔案唯讀就可以了,另乙個設定為可寫,當不存在時,必須要建立,同時可以先把關閉檔案

的函式先寫了。

if((fd1=open(argv[1],o_rdonly))<0)

if((fd2=open(argv[2],o_wronly|o_creat,0755))<0)

.....

close(fd1);

close(fd2);

3.開啟檔案成功後,開始進入拷貝檔案過程

1.bytes_read=read(fd1,buf,size);讀取size個位元組,實際讀到多少,返回為bytes_read

2.此時繼續進行判斷,當返回值bytes_read<0,代表沒有讀到東西,直接退出循壞,此時沒有必要拷貝

若讀到內容,則開始把讀出來的內容放到另乙個檔案中。

3.else if(bytes_read>0)

}這裡為什麼要設定乙個指標指向buf陣列,為什麼還要用while迴圈呢?

因為:bytes_write=write(fd2,p,bytes_read) 呼叫這個函式時,雖然要求寫入bytes_read個位元組

但實際的情況可能一次性不能寫入這麼多位元組,因此通過返回值bytes_write就可以知道究竟寫入多少位元組

當bytes_write<0直接退出,寫入失敗,或bytes_write=bytes_read 寫入成功,也退出。

(bytes_write>0)&&(bytes_write!=bytes_read)一次性沒寫完,繼續把剩餘的寫完。

llinux 檔案搜尋命令

檔案搜尋命令 locate locate 檔名 只能搜尋檔名 在後台資料庫中按檔名搜尋,搜尋速度快 var lib mlocate update 更新資料庫 命令搜尋命令 whereis與which 1 搜尋命令的命令whereis whereis 命令名 選項 b 只查詢可執行檔案 m 只查詢幫助...

llinux 寫 etc passwd檔案新增使用者

前言 在做vulnhub靶機 ai web 1 0的時候,getshell使用者具有 etc passwd寫許可權,etc shadow無讀寫許可權。傻子將 etc passwd密碼直接以明文寫進去,不能登入。前提操作使用者對檔案 etc passwd有寫許可權。一 簡單介紹 etc passwd檔...

Llinux常用命令2

對於乙個檔案file來說 如果有r許可權表示可執行 cat more less head tail如果有w許可權表示可執行 vim如果有x許可權表示可執行 xcript command 對於乙個目錄directory來說 如果有r許可權表示可以執行 ls如果有w許可權表示可以執行 touch mkd...