关于文件的操作,主要的函数是open,close,write,read,lseek,mmap,这几个函数,因为到现在再把以前的文操作再复习一边,都是比较简单的操作,都不多说。直接给出代码::
1,open write函数:
1 #include2 #include 3 #include 4 #include 5 #include 6 7 8 int main() 9 { 10 int fd =open("hong.txt",O_CREAT|O_RDWR,0777); 11 if(fd < 0) 12 { 13 perror("open"); 14 exit(1); 15 } 16 17 printf("open file discribler is %d \n",fd); 18 19 char* buf ="hello binary_tree!\n"; 20 21 fd=write(fd,buf,strlen(buf)); 22 if(fd < 0) 23 { 24 perror("write"); 25 exit(1); 26 } 27 28 close(fd); 29 }~ ~ ~
运行结果:
2.read
1 #include2 #include 3 #include 4 #include 5 #include 6 7 8 int main() 9 { 10 int fd =open("hong.txt",O_CREAT|O_RDWR,0777); 11 if(fd < 0) 12 { 13 perror("open"); 14 exit(1); 15 } 16 17 printf("open file discribler is %d \n",fd); 18 19 char buf[30]; 20 memset(buf,0,30); 21 22 int fp=read(fd,buf,1023); 23 if(fp < 0) 24 { 25 perror("read"); 26 exit(1); 27 } 28 printf("read buf is %s\n",buf); 29 30 fp=write(1,buf,sizeof(buf)); 31 if(fp < 0) 32 { 33 perror("write"); 34 exit(1); 35 } 36 37 close(fd); 38 }~ ~ ~ ~
运行结果:
3.mmap:将文件映射到内存操作。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 10 int main() 11 { 12 int fd =open("hong.txt",O_CREAT|O_RDWR,0777); 13 if(fd < 0) 14 { 15 perror("open"); 16 exit(1); 17 } 18 19 struct stat my; 20 int fp = fstat(fd,&my); 21 if(fp < 0) 22 { 23 perror("fstat\n"); 24 exit(1); 25 } 26 27 28 char* addr= mmap(NULL,my.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); 29 if(addr == (void*)-1) 30 { 31 perror("mmap\n"); 32 exit(1); 33 } 34 printf("addr is %s\n",addr); 35 strcpy(addr,"this is new string\n"); 36 37 char buf[40]; 38 memset(buf,0,40); 39 fp =read(fd,buf,40); 40 if(fp < 0) 41 { 42 perror("open"); 43 exit(1); 44 } 45 printf("read buf is %s\n",buf); 46 47 munmap(addr,my.st_size); 48 addr=NULL; 49 close(fd); 50 }~
总结:
关于文件操作,都是比较简单的操作,其中,比较难掌握的是mmap,其实作用就是将文件映射到内错单元,通过操作内存来操作文件,值得注意的是一些小问题,比如,关闭文件,释放映射的单元,memset的初始化之类的问题,还有,如果是在读写文件的时候,特别是读的时候,发现读出的数据异常,极有可能是lseek读写指针的问题,所以要主要清零的问题。其他的问题,如果是忘了函数参数的具体。可以man手册帮助