打开文件 -- open
open(const char *pathname, int flags);
open(const char *pathname, int flags, mode_t mode);
形参:
pathname -- 文件的路径
flags:下面的宏定义必须选择一个
O_RDONLY -- 只读
O_WRONLY -- 只写
O_RDWR -- 读写
下面的宏可选:
O_CREAT -- 文件不存在,创建,存在,不起作用
O_TRUNC -- 清空写
O_APPEND -- 追加写
mode:如果flag里面用了O_CREAT,此时需要提供第三个参数,第三个参数就是文件的权限;
关闭:close
close(int fd);
形参:open的返回值
写 -- write
write(int fd, const void *buf, size_t count);
形参:fd -- open的返回值
buf:要写入的内容的首地址
count:写入的字节数
返回值:成功真正写入的字节数
读 -- read
read(int fd, void *buf, size_t count);
形参:fd -- open的返回值
buf:读取之后要保存的位置的首地址
count:读取的字节数
返回值:成功真正读取到的字节数(读到文件末尾,返回0)
lseek
lseek(int fd, off_t offset,int whence);
形参:fp:open的返回值
offset:偏移量(+往文件末尾方向偏移,-往文件开头偏移)
whence:SEEK_SET 0
SEEK_CUR 1
SEEK_END 2
返回值:先做后面的光标偏移,返回光标偏移之后的位置到文件开头的偏移量;
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "fcntl.h"
#include "unistd.h"
#include "pthread.h"
int main(int argc, char *argv[])
{
int n = 0;
char buf[1024];
int fd1 = open(argv[1],O_RDONLY,0644);
int fd2 = open(argv[2],O_RDWR | O_CREAT | O_TRUNC,0644);
while(n = read(fd1,buf,1024))
{
write(fd2,buf,n);
}
n = lseek(fd2,0,SEEK_END);
printf("%d\n",n);
close(fd1);
close(fd2);
return 0;
}