C語言筆記、檔案io的操作
一個自己定義的標頭檔案:
檔名為 xxx.h
內容:
#ifndef _MYHEAD_H
#define _MYHEAD_H
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#endif
紅色字型必須存在,中間可以新增你所有需要的標頭檔案
------------------------------------------------------------------
對於檔案的操作
#include "myhead.h"
int main()
{
//1.開啟檔案
int fd = open("./1.txt",O_RDWR);
if(fd == -1)
{
printf("open file faield\n");
return -1;//異常退出
}
printf("open file OK~~~\n");
//2.將內容寫入到檔案
char buf[10] = "hellomeinv";
int w_size = write(fd,buf,sizeof(buf));
if(w_size == -1)
{
printf("write failed\n");
return -1;
}
/*
******************************************************
lseek函式可以用於文字檔案的游標重新定位,因為開啟一個文字文件後,如果需要閱讀游標就是直接在檔案內容的最後面,從而導致檢視文件時不能檢視,使用lseek()
off_t lseek(int fd, off_t offset, int whence);
隨機定位符
fd:需要移動檔案游標所對應的檔案描述符
offest:游標的偏移量
whence:從哪裡開始偏移
SEEK_SET:從檔案起始位置開始偏移
SEEK_CUR:從檔案的當前位置開始偏移
SEEK_END:從檔案的末尾開始偏移
舉例:
lseek(fd,-10,SEEK_END) //從檔案的末尾開始向前偏移10個位元組的單位長度
*/
lseek(fd,-10,SEEK_END);
——————————————————
也可以不適用lessk函式而在每次操作完檔案關閉檔案。
程式碼可以是:
close(fd);
int fd = open("./1.txt",O_RDWR);
if(fd == -1)
{
printf("open file faield\n");
return -1;//異常退出
}
printf("open file OK~~~\n");
重新開啟接第三步,讀取檔案內容。
********************************************************************************************************
lseek(fd,-10,SEEK_END);
//3.讀取檔案內容並且打印出來
char buff[128] = {0};
int r_size = read(fd,buff,sizeof(buff));
if (r_size == -1)
{
printf("read failed\n");
return -1;
}
//列印檔案內容
printf("%s\n",buff);
close(fd);
return 0;
}
——————————————————————————————————————
如何複製一個文字文件。
#include "myhead.h"
int main()
{
//建立一個新檔案
int fd = open("./3.txt",O_RDWR|O_CREAT,0777);
if (fd == -1)
{
printf("creat file failed\n");
return -1;
}
//開啟要複製的檔案
int fdd = open("./1.txt",O_RDWR);
if (fdd == -1)
{
printf("open 1.txt failed\n");
return -1;
}
char k[120] = {0};
int r_read,r_write;
//使用while迴圈實現讀取和寫入。
while(1)
{
r_read = read(fdd,k,sizeof(k));
r_write = write(fd,k,sizeof(k));
if (r_write == -1)
{
printf("write failed\n");
return -1;
}
printf("over\n");
break;
}
close(fdd);
close(fd);
return 0;
}