**
linux学习
**
文件的系统编程
open函数
包含头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
定义函数
int open( const char * pathname,int flags);
int open( const char * pathname,int flags,mode_t mode);
int open( const char * pathname,mode_t mode);
int fd;
fd=open("./file",O_RDWR|O_CREAT,0600);
参数详情链接:https://blog.csdn.net/tianmohust/article/details/6860654
write函数
#include<unistd.h>
ssize_t write (int fd, const void * buf, size_t count);
参数说明,fd为文件的标识一般是open函数的返回值,把count个字节写入,buf中
需要注意buf是一个无类型指针,定义时可能需要char*强制转换
不完整例子:(省略OPEN函数以及相关判断)
char *buf="wo hen shuai";
write(fd,buf,strlen(buf));
返回值是写入的字节个数,read返回值也是一样
read函数
#include<unistd.h>
ssize_t read (int fd, void * buf, size_t count);
用法同write()
char *readbuf
readbuf=(char *)malloc(size)
lseek函数
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
fd 表示要操作的文件描述符
offset是相对于whence(基准)的偏移量
whence 可以是SEEK_SET(文件指针开始),SEEK_CUR(文件指针当前位置) ,SEEK_END为文件指针尾
返回值:文件读写指针距文件开头的字节大小,出错,返回-1
lseek(fd,0,SEEK_SET)//设置在文件头
offset是偏移量,负数往前走,正数往后走
且lseek返回值是针对文件头偏移多少字节
所以可用n = lseek(fd,0,SEEK_END)计算文件字节n多少
标准库的文件函数
FILE * fopen(const char * path,const char * mode)
返回值位一个指针
“r” 打开文字文件只读
“w” 创建文字文件只写
“a” 增补, 如果文件不存在则创建一个
“r+” 打开一个文字文件读/写
“w+” 创建一个文字文件读/写
“a+” 打开或创建一个文件增补
“b” 二进制文件(可以和上面每一项合用)
“t” 文这文件(默认项)
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
#include<stdio.h>
int main(){
FILE *fp;
char *str"hello world";
char readbuf[128]={0};
fp=fopen("./file.txt",w+);
fwrite(str,sizeof(char),strlen(str),fp);
//fwrite(str,sizeof(char)*strlen(str),1,fp);
fssek(fp,0,SEEK_SET);
fread(readbuf,sizeof(char),strlen(str),fp);
return 0;
}