04文件与IO
文件系统调用:
open、close、create、read、write
open:
int open(const char* path, int flags)
path:要打开的文件的路径
flags:打开的模式
执行结果:成功返回文件描述符,失败返回-1。
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h> //普通的宏定义写法,多条语句用逗号表达式。
//#define ERR_EXIT(m) (perror(m), exit(EXIT_FAILURE)) //这种宏定义的写法更为专业,工作中都是用这种
#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while() int main(void)
{
int fd;
fd = open("test.txt", O_RDONLY);
/*
if (fd == -1)
{
fprintf(stderr, "open error with errno=%d %s\n", errno, strerror(errno));
exit(EXIT_FAILURE);
}
*/
/*
if (fd == -1)
{
perror("open error");
exit(EXIT_FAILURE);
}
*/
if (fd == -)
ERR_EXIT("open error"); printf("open succ\n");
return ;
}
int open(const char *path, int flags,mode_t mode);
打开成功,返回文件描述符;
打开失败,返回-1
|
打开方式 |
描述 |
|
O_RDONLY |
打开一个供读取的文件 |
|
O_WRONLY |
打开一个供写入的文件 |
|
O_RDWR |
打开一个可供读写的文件 |
|
O_APPEND |
写入的所有数据将被追加到文件的末尾 |
|
O_CREAT |
打开文件,如果文件不存在则建立文件 |
|
O_EXCL |
如果已经置O_CREAT且文件存在,则强制open()失败 |
|
O_TRUNC |
在open()时,将文件的内容清空 |
其中注意打开的文件的权限不是mode而是mode&^umask。
自己可以用umask命令查看当前的umask值,在程序中也可以用umask()来指定umask的值,例如:umask(0)。
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h> #define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0) int main(void)
{
umask(0);
int fd;
fd = open("test.txt", O_WRONLY | O_CREAT | O_EXCL, 0666);
if (fd == -1)
ERR_EXIT("open error"); printf("open succ\n");
return 0;
}
权限可以用数字的形式也可以用下面这种,不过数字更直观一点。
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h> #define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0) int main(void)
{
umask(0); //在程序中自己指定umask值
int fd;
fd = open("test2.txt", O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
if (fd == -1)
ERR_EXIT("open error"); printf("open succ\n");
close(fd); //养成好习惯不用了就关闭掉
return 0;
}
如打开一个新文件:
#define NEWFILE (O_WRONLY|O_CREAT|O_TRUNC)
#include <sys/stat.h> 访问到,同样可以通过|运算来对访问权限进行组合
#define MODE755 (S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
04文件与IO的更多相关文章
- 【Go】使用压缩文件优化io (二)
原文链接: https://blog.thinkeridea.com/201907/go/compress_file_io_optimization2.html 上一篇文章<使用压缩文件优化io ...
- node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource7 本博客同步在https://cnodejs.o ...
- 文件和IO流
摘要:本文主要介绍了Java的文件处理以及常用的IO流操作. 文件操作 概念 File是数据源(保存数据的地方)的一种,可以表示一个文件,也可以表示一个文件目录. File类只能对文件和文件夹进行创建 ...
- Atitit.跨语言 文件夹与文件的io操作集合 草案
Atitit.跨语言 文件夹与文件的io操作集合 草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...
- PythonCookBook笔记——文件与IO
文件与IO 所有的程序都要处理输入与输出,涉及到文本.二进制文件.文件编码和对文件名.目录的操作. 读写文本数据 需要读写各种不同编码的文本数据,使用rt模式的open()函数. 该读写操作使用系统默 ...
- 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能. 幸运的是,Apache Commons IO等开源组件已经帮我们实现了. 我们可以不用重复 ...
- linux系统编程之文件与io(四)
今天继续学习文件与io,主要是学习文件共享及文件.复制文件描述符,有点抽象,主要是概念上的理解,但是很重要,下面一一来分解: 文件共享: 回顾一下,在linux系统调用中,是通过文件描述符来访问文件的 ...
- linux系统编程之文件与io(二)
今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型: 下面以一个实现文件简单拷贝的示 ...
- linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...
随机推荐
- mysql 日期 时间戳 转换
/***************************************************************************************** * mysql 日 ...
- fsutil
编号:1035时间:2016年8月29日15:41:57功能:fsutil栗子:fsutil file createnew e:\b.txt 1073741824 //创建1G文件http://www ...
- 一张图让你学会LVM
导读 随着科技的进步,人们不知不觉的就进入了大数据的时代,数据的不断增加我们发现我们的磁盘越来越不够用了,接下来就是令人头疼的事情--加硬盘,数据的备份与还原.LVM就是Linux下专门针对我们数据的 ...
- HOG特征(Histogram of Gradient)总结(转载)
整理一下我个人觉得比较好的HOG博文 博文1:OpenCV HOGDescriptor: 参数与图解 http://blog.csdn.NET/raodotcong/article/details/6 ...
- C++ Primer :第十章 :泛型算法之再探迭代器以及其他算法
除了为每个容器定义的迭代器之外,标准库在头文件<iterator>还定义了额外集中迭代器, 包括: 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 流迭代器, 这些迭 ...
- tyvj1015 - 公路乘车 ——完全背包
题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1015 完全背包 #include <cstdio> #include <algorit ...
- linux文件系统---10
进入 Linux 根目录(即“/”, Linux 文件系统的入口, 也是处于最高一级的目录),运行“ls –l”命令,可以看到 Linux 系统包含以下目录. 1./bin 包含基本命令,如 ls.c ...
- QAQ
贴吧怎么了最近多了一些脑残帖子 回答完问题你追我 ? 你追你mb你车费都凑不够. 答着答着你也许就哭了 我哭你mb 老子脑袋又没病 . 英国最最虐心的调查 ,我虐你mb还英国 你出过省吗? 晚上回家 ...
- jquery 按回城 等于提交按钮
$(document).keydown(function(e){ if(e.keyCode==13){ $('.bu ...
- MySQL性能优化之max_connections配置参数浅析
这篇文章主要介绍了MySQL性能优化之max_connections配置参数浅析,本文着重讲解了3种配置max_connections参数的方法,需要的朋友可以参考下 MySQL的max_connec ...