linux文件读写(一)
1. 查看man手册
man查询手册
<1>man 1 +命令 这里的1表示为查询的是Linux命令
<2>man 2 xxx 这里的2表示为查询的是linux api
<3>man 3 xxx 这里的3表示为查询的是c库函数
2. linux下的文件接口函数
open read write close lseek
3. 文件操作的基本步骤与注意事项
a.文件的打开(open)
函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
/*在linux函数调用中实际上使用的第二个函数
C语言中没有重载*/
参数:
pathname:需要打开的文件路径
flags: 打开状态
O_RDONLY: 只读打开
O_WRONLY:只写打开
O_RDWR: 可读可写打开
O_CREAT: 创建
mode: 读取权限 例:0666
返回值:
如果返回值为-1则打开失败
b.文件的读(read)
函数原型
#include<unistd.h>
ssize_t read(int fd, void *buf, size_t count);
参数:
fd: 文件描述符(函数open的返回值)
*buf: 缓冲区(存储需要读的数据)
count:缓冲区的大小( sizeof(buf))
返回值:
如果返回值为-1则读取失败
c.文件的写(write)
函数原型
#include<unistd.h>
sszie_t write(int fd, const void *buf, size_t count);
参数:
fd: 文件描述符
*buf: 缓冲区(要写到文件的数据)
count:数据的大小( strlen(buf))
返回值:
如果返回值为-1则写入失败
测试代码:
#include<stdio.h>
#include<unistd.h>
#include<error.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<fcntl.h>
int main(int args,char *argv[])
{
char readbuf[128]={0}; //缓冲区
char *str="hello world!";
int fd;
int n_read;
int n_write;
if((fd=open("./test.c",ORWR||O_CREAT))==-1) //文件的打开
{
perror("open");
exit(-1);
}
if((n_read=read(fd,readbuf,sizeof(readbuf)))==-1) //文件的读取
{
perror("read");
exit(-1);
}
if((n_write=write(fd,readbuf,strlen(readbuf)))==-1)//文件的写入
{
perror("write");
exit(-1);
}
printf("返回的文件描述符 fd=%d\n",fd);
printf("读取的大小 n_read=%d\n",n_read);
printf("写入的大小 n_write=%d\n",n_write);
close(fd); //文件的关闭
return 0;
}
输出结果: