Linux文件操作

来源:互联网 发布:淘宝商城儿童电动车 编辑:程序博客网 时间:2024/06/09 18:50
Linux文件操作

fopen 创建的文件的访问权限将以 0666 与当前的 umask 结合来确定
rb+与ab+的区别

1.数据块读写
fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream);

2.格式化读写
scanf和printf
sscanf和sprintf
fscanf和fprintf

3.单个字符读写
fgetc和fputc
getc和putc
getchar和putchar

4.字符串读写
fgets和fputs
gets和puts


5.目录操作
 1.改变目录或文件的访问权限
#include <sys/stat.h>
int chmod(const char* path, mode_t mode);//mode 形如: 0777

 2.获取、改变当前目录
#include <unistd.h> //头文件
char *getcwd(char *buf, size_t size); //获取当前目录, 相当于 pwd 命令
int chdir(const char *path); //修改当前目录, 即切换目录, 相当于 cd 命令
getcwd(NULL, 0);

 3.创建和删除目录
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int mkdir(const char *pathname, mode_t mode); //创建目录,mode 是目录权限
int rmdir(const char *pathname); //删除目录

//受掩码影响

 4.获取目录信息
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name); //打开一个目录
struct dirent *readdir(DIR *dir); //读取目录的一项信息, 并返回该项信息的结构体指针
int closedir(DIR *dir); //关闭目录文件

void rewinddir(DIR *dir); //重新定位到目录文件的头部
void seekdir(DIR *dir,off_t offset);//用来设置目录流目前的读取位置
off_t telldir(DIR *dir); //返回目录流当前的读取位置

6.标准输入/输出流
标准输入、 输出、 错误流
stdin、 stdout、 stderr

7.基于文件描述符的文件操作
 1.打开、创建和关闭文件
open和creat和close
open 出错返回-1
文件的打开引用计数为0时,文件才会真正的关闭
#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);//文件名 打开方式 权限

O_RDONLY //以只读方式打开
O_WRONLY //以只写方式打开
O_RDWR //以读写方式打开
O_EXCL //仅与 O_CREAT 连用,如果文件已存在,则强制 open 失败
O_TRUNC //如果文件存在, 将文件的长度截至 0

 2.读写文件
read和write 出错返回-1
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);//文件描述词 缓冲区 长度
ssize_t write(int fd, const void *buf, size_t count);

 3.改变文件大小
#include <unistd.h>
int ftruncate(int fd, off_t length);
返回值 执行成功则返回 0, 失败返回-1

 4.文件定位
lseek
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);//fd 文件描述词
whence 可以是下面三个常量的一个
SEEK_SET 从文件头开始计算
SEEK_CUR 从当前指针开始计算
SEEK_END 从文件尾开始计算

返回值为偏移值

文件空洞--多进程间通信的共享内存

 5.获取文件信息
fstat和stat
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *file_name, struct stat *buf); //文件名 stat 结构体指针
int fstat(int fd, struct stat *buf); //文件描述词 stat 结构体指针

 6.文件描述符的复制--用来重定向进程的stdin(0),stdout(1),stderr(2)
int dup(int oldfd);
int dup2(int oldfd, int newfd);

 7.管道文件实现即时聊天
pipe

多路复用:
读进程
打开管道1的读端
打开管道2的写端

while(1)
{
read(0);//先读标准输入
write(fdw);//写内容到管道2
read(fdr);//从管道1中读内容
printf();//输出管道1中的内容
}

写进程
打开管道1的写端
打开管道2的读端

while(1)
{
read(fdr);//从管道2中读内容
printf();//输出管道2中的内容
read(0);//读标准输入
write(fdw);//写内容到管道1
}

//双方不能互发消息
利用select()函数

8.MMAP 文件映射
改变文件的内容

日志:
void syslog(int priority, const char* message,arguments…);
LOG_INFO 一般信息
LOG_DEBUG 调试信息(写不到 messages 里面)

syslog(LOG_DEBUG,"this is debug%d %s\n",10,"aaa");


0 0