1、标准C库中访问文件用的是文件指针FILE *(stdin,stdout,stderr);对于linux系统编程而言,所有对设备或文件的操作都是通过文件描述符进行的

2、当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数),后续对文件的操作只需要通过文件描述符,内核记录有关这个打开文件的信息

3、一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量定义在

unistd.h头文件中。

一、文件描述符与文件指针的转换

fileno:将文件指针转换为文件描述符

fdopen:将文件描述符转换为文件指针       FILE *fdopen(int fd, const char* mode);

二、open系统调用

int open(const char *path, int flags, mode_t mode); //path 文件的名称,可以包含路径;flags文件打开模式;

mode用来规定对该文件的所有者,文件的用户组及系统中其他用户的访问权限。(文件所有者、文件用户组、文件其他用户)

其中,O_RDONLY :打开一个供读取的文件

   O_WRONLY:打开一个供写入的文件

      O_RDWR:打开一个可供读写的文件

      O_APPEND:写入的所有数据被追加到文件末尾

      O_CREAT:打开文件,如果文件不存在则建立文件

    O_TRUNC:在open()时,清空文件。

这些标志的符号名称可以通过#include <fcntl>访问。

 //打开文件 
1 #include<unistd.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<errno.h>
6
7 #include<stdlib.h>
8 #include<stdio.h>
9 #include<string.h>
10
11 //#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE))
12 #define ERR_EXIT(m)\
13 do\
14 {\
15 perror(m);\
16 exit(EXIT_FAILURE);\
17 }while(0)
18 //宏定义后面只能接一个语句。接do while语句
19 int main()
20 {
21 int fd;
22 fd=open("text.txt",O_RDONLY);
23 /* if(fd==-1){
24 fprintf(stderr,"open error with errno=%d_%s\n",errno,strerro r(errno));
25 exit(EXIT_FAILURE);
26 }
27 */
28 /*
29 if (fd==-1)
30 {
31 perror("open error");
32 exit(EXIT_FAILURE);
33 }
34 */
35 if(fd==-1)
36 ERR_EXIT("open_error");
37 printf("open success\n");
38 return 0;
39
40 }

创建文件:创建一个666权限的文件,需要考虑到系统umask值:(mode & ~umask)的值才是实际文件的权限值

(666 &~ 022):644

  1 #include<unistd.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<errno.h>
6 #include<stdlib.h>
7 #include<stdio.h>
8 #include<string.h>
9 //#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE))
10 #define ERR_EXIT(m)\
11 do\
12 {\
13 perror(m);\
14 exit(EXIT_FAILURE);\
15 }while(0)
16 int main()
17 {
18 int fd;
19 fd=open("test.txt",O_WRONLY|O_CREAT,0666);
20 if(fd==-1)
21 ERR_EXIT("open error");
22 printf("open succ\n");
23 return 0;
}

UNIX系统编程:文件IO(I)的更多相关文章

  1. linux系统编程--文件IO

    系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...

  2. 系统编程--文件IO

    1.文件描述符 文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时候,内核向进程返回一个文件描述符,新打开文件返回文件描述符表中未使用的最小文件描述符.Unix系统shell使用文件描述符 ...

  3. Linux系统编程--文件IO操作

    Linux思想即,Linux系统下一切皆文件. 一.对文件操作的几个函数 1.打开文件open函数 int open(const char *path, int oflags); int open(c ...

  4. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  5. 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

    关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...

  6. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  7. 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍

    关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...

  8. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  9. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  10. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

随机推荐

  1. java基础语句翻译

    public static void main(String[] args) { System.out.println("人生中的第一个代码-----"); } } package ...

  2. 从源码角度来分析线程池-ThreadPoolExecutor实现原理

    作为一名Java开发工程师,想必性能问题是不可避免的.通常,在遇到性能瓶颈时第一时间肯定会想到利用缓存来解决问题,然而缓存虽好用,但也并非万能,某些场景依然无法覆盖.比如:需要实时.多次调用第三方AP ...

  3. 网络最大流Dinic

    1.什么是网络最大流 形象的来说,网络最大流其实就是这样一个生活化的问题:现在有一个由许多水管组成的水流系统,每一根管道都有自己的最大通过水流限制(流量),超过这个限制水管会爆(你麻麻就会来找你喝茶q ...

  4. linux(centos8):基于java13安装rocketmq-4.7.1(解决jdk不兼容的报错)

    一,Rocketmq是什么? 1, RocketMQ是一个队列模型的消息中间件,具有高性能.高可靠.高实时.分布式特点 相比kafka,rocketmq的实时性更强 2,官方网站: http://ro ...

  5. vue知识点13

    知识点归纳整理如下: 组件 component     1.页面中的一部分,可以复用, 本质上是一个拥有预定义选项的一个 Vue 实例         2.使用         1)定义        ...

  6. Microsoft.Extensions.DependencyInjection中的Transient依赖注入关系,使用不当会造成内存泄漏

    Microsoft.Extensions.DependencyInjection中(下面简称DI)的Transient依赖注入关系,表示每次DI获取一个全新的注入对象.但是使用Transient依赖注 ...

  7. 联赛模拟测试22 D. 简单计算

    题目描述 分析 \(\sum_{i=0}^p[(p|qi)?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|qi/gcd(p,q))?0:1]=\sum_{i=0}^p[(p/gcd(p, ...

  8. javaScript 必会基础知识

    1.JavaScript是一种浏览器解析的轻量级脚本语言. 2.html.jsp等内部js代码写在<script></script>之间:外部js文件中书写js代码不能有< ...

  9. drf ( 学习第四部 )

    目录 DRF框架中常用的组件 分页Pagination 异常处理Exceptions 自动生成接口文档 安装依赖 设置接口文档访问路径 访问接口文档网页 Admin 列表页配置 详情页配置 Xadmi ...

  10. oVirt4.4虚拟机备份方法

    红帽oVirt于今年推出了oVirt 4.4,该版本在系统.存储.网络.用户界面等方面做出增强功能与优化更新,为oVirt用户提供功能更强大.更灵活的IT基础架构.云祺科技也于最近发布了全新版本云祺容 ...