1. 程式人生 > 其它 >[UBUNTU]挖礦病毒處理

[UBUNTU]挖礦病毒處理

技術標籤:linux

linux檔案基本操作

一、簡介
兩種操作檔案的方式常見的API操作函式名稱如下:

    1、系統I/O:系統呼叫介面,open(), read(), write(), lseek(), close()。是作業系統直接提供的程式設計介面(API)。

    2、標準/IO:標準庫的I/O函式,fopen(), fread(), fwrite(), fseek(), fclose(),是對系統呼叫介面進一步封裝。

    系統I/O常用於硬體級別,可以設定讀緩衝區,一般沒有寫緩衝區;

    標準I/O常用於軟體級別,自帶讀寫緩衝區。

二、系統I/O操作
1.open()函式

原型 int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
引數 pathname 要開啟的檔案路徑名稱
flags O_RDONLY 只讀方式開啟檔案 這三個引數互斥
O_WRONLY 只寫方式開啟檔案
O_RDWR 讀寫方式開啟檔案
O_CREAT 如果檔案不存在,則建立該檔案
O_TRUNC 如檔案已經存在,則刪除檔案中原有資料
O_APPEND 以追加方式開啟檔案
mode 如果檔案被新建,指定其許可權為mode(八進位制表示法)
返回值 成功 大於等於0 的整數(即檔案描述符)
失敗 -1,並且errno會被設定

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>

int main(void)
{
        int fd;
        fd=open("./test",O_RDWR); //以可讀可寫方式開啟
        if(fd==-1)
        {
                printf("open test error\n");
        }
fd=open("./test",O_RDWR|O_CREAT,0600);//如果不存在則建立一個 printf("fd=%d\n",fd); return 0; }

在這裡插入圖片描述

2.read() 、write()
標頭檔案 :#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);

#include<string.h>
#include<stdlib.h>
int main(void)
{
        int fd;
        fd=open("./test",O_RDWR);
        if(fd==-1)
        {
                printf("open failed\n");
        }
        printf("open success fd=%d\n",fd);

        char buf[]="xaio yin best";
        int n_write=write(fd,&buf,strlen(buf)); //成功返回實際值.s失敗返回-1
        if(n_write!=-1)
        {
                printf("write %d byte to file\n",n_write);
        }

//      close(fd);
//      fd=open("./test",O_RDWR);

        lseek(fd,0,SEEK_SET); //將檔案從頭開始
        char *readbuf=(char *)malloc(sizeof(readbuf));
        int n_read=read(fd,readbuf,n_write);//成功返回實際讀取數值失敗返回-1
        printf("read data:%d context :%s\n",n_read,readbuf);

        close(fd);//關閉檔案
        return 0;
}

在這裡插入圖片描述3.write、read函式實現cp命令

#include <fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
        if(argc<3)
        {
                perror("error\n");
                exit(-1);
        }

        int fdsrc;
        char *readbuf;
        fdsrc=open(argv[1],O_RDWR);
        int size=lseek(fdsrc,0,SEEK_END);
        lseek(fdsrc,0,SEEK_SET);
        readbuf=(char *)malloc(sizeof(char)*size+8);
        int n_read=read(fdsrc,readbuf,size);


        int fddes;
        fddes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
        int n_write=write(fddes,readbuf,strlen(readbuf));

        close(fdsrc);
        close(fddes);

}

在這裡插入圖片描述三、標準/IO

1.fopen()函式
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
成功返回檔案指標失敗返回NULL
pathname這裡同樣是檔案的路徑及名稱 mode 和系統I/O函式的有很大不同

“r” : 以只讀方式開啟檔案,要求檔案必須存在。

“r+: 以讀寫方式開啟檔案,要求檔案必須存在。

“w” :  以只寫方式開啟檔案,檔案如果不存在將會建立新檔案,如果存

在將會將其內容清空。

“w+:  以讀寫方式開啟檔案,檔案如果不存在將會建立新檔案,如果存在將會將其內容清空。

“a” : 以只寫方式開啟檔案,檔案如果不存在將會建立新檔案,且檔案位置偏移量被自動定位到檔案末尾(即以追加方式寫資料)。

“a+: 以讀寫方式開啟檔案,檔案如果不存在將會建立新檔案,第一次用於寫資料則檔案位置偏移量被自動定位到檔案末尾(即以追加方式寫資料),如果第一次用於讀資料,檔案位置偏移位置會定位到檔案開始。

下面就以常用的標誌I/O函式舉例子

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
        FILE *fp; //檔案指標
        fp=fopen("./test2","w+");
        if(fp==NULL)
        {
                perror("error\n");
                exit(-1);
        }
        printf("fopen success\n");
        fclose(fp); //關閉檔案與系統I/O中close(fd)作用相同
        return 0;

}

在這裡插入圖片描述2.fread()、fwrite()

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);

//函式中的引數具體指什麼看下面的程式碼吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
        FILE *fp;
        fp=fopen("./test2","w+");  //w+方式開啟檔案如果不存在則建立一個

        if(fp==NULL)
        {
                perror("error\n");
                exit(-1);
        }

        char *str="xiao yin student";
        fwrite(str,sizeof(char),strlen(str),fp);
//      fwrite(str,sizeof(char)*strlen(str),1,fp);
        char readbuf[128]={0};
        fseek(fp,0,SEEK_SET); //fseek與lseek函式的作用一樣將游標指向開始位置要不然在後面的讀取中會出現問題
        fread(readbuf,sizeof(char),strlen(str),fp);
        printf("read data:%s\n",readbuf);
        return 0;
}

在這裡插入圖片描述還有一些其他函式如:fgetc() 、fputc()....

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(void)
{
        FILE *fp;
        char c;
        fp=fopen("./test.txt","r");
        if(fp==NULL)
        {
                printf("fopen error\n");
                exit(-1);
        }
        while(!feof(fp)) //feof如果還沒有到檔案末尾返回0,結束返回非零
        {
                c=fgetc(fp);
                printf("%c ",c);
        }
        fclose(fp);
        return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(void)
{
        FILE *fp;
        fp=fopen("./test.txt","w+");
        if(fp==NULL)
        {
                printf("fopen error\n");
                exit(-1);
        }

        char *str="xiao yin student";
        int i;
        int len=strlen(str);
        for(i=0;i<len;i++)
        {
                fputc(*str,fp);
                str++;
        }
//      fputc('a',fp);
        fclose(fp);

        return 0;
}

在這裡插入圖片描述以上就是檔案操作常用到的一些API 函式,記錄自己學習過程希望也能幫助到其他小夥伴們。