本文通過乙個拷貝檔案的程式介紹下,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...