`
sharp2wing
  • 浏览: 267416 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

基本IO函数的使用(open,write,read)(一)

阅读更多
首先感谢作者的工作,谢谢了,转到这里都是我需要过的

=>#include <fcntl.h> =>/usr/include/bits/fcntl.h ,里面有

/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
   located on an ext2 file system */
#define O_ACCMODE       0003
#define O_RDONLY          00
#define O_WRONLY         01
#define O_RDWR             02
#define O_CREAT            0100 /* not fcntl */
#define O_EXCL              0200 /* not fcntl */
#define O_NOCTTY          0400 /* not fcntl */
#define O_TRUNC            01000 /* not fcntl */
#define O_APPEND          02000
#define O_NONBLOCK     04000
#define O_NDELAY           O_NONBLOCK
#define O_SYNC              010000
#define O_FSYNC             O_SYNC
#define O_ASYNC            020000

摘要:本文简单介绍文件操作的三个函数(open,read,write)的基本用法。
详细说明了open函数的用法。

    作者:zieckey (zieckey@yahoo.com.cn)
    All Rights Reserved!

所需头文件:
#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);

函数说明:
参数 pathname 指向欲打开的文件路径字符串。下列是参数 flags 所能使用的旗标:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR以可读写方式打开文件。
上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用 OR(|)运算符组合。

O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_EXCL 如果 O_CREAT 也被设置,     此指令会去检查文件是否存在。文件若不存在则建立该文件,        
   否则将导致打开文件错误。 此外,若 O_CREAT 与 O_EXCL 同时设置,  并且欲打开的文件为符号连接,则会打开文件失败。
O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为 0,而原来存于该文件的资料也会消失。
O_APPEND 当读写文件时会从文件尾开始移动,        也就是所写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_NDELAY 同 O_NONBLOCK。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数 pathname 所指的文件为一符号连接,则会令打开文件失败。
O_DIRECTORY 如果参数 pathname 所指的文件并非为一目录,  则
    会令打开文件失败。此为 Linux2.2 以后特有的旗标,以避免一些系
    统安全问题。参数 mode 则有下列数种组合,只有在建立新文件时
    才会生效,此外真正建文件时的权限会受到 umask 值所影响,因此
    该文件权限应该为(mode-umaks).
S_IRWXU00700 权限, 代表该文件所有者具有可读、    可写及可执行的权限。
S_IRUSR 或 S_IREAD,00400 权限,代表该文件所有者具有可读取的权限。
S_IWUSR 或 S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
S_IXUSR 或 S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
S_IRWXG 00070 权限,代表该文件用户组具有可读、    可写及可执行的权限。
S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
S_IWGRP 00020 权限,代表该文件用户组具有可写入的权限。
S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
S_IRWXO 00007 权限,代表其他用户具有可读、可写及可执行的权限。
S_IROTH 00004 权限,代表其他用户具有可读的权限
S_IWOTH 00002 权限,代表其他用户具有可写入的权限。
S_IXOTH 00001 权限,代表其他用户具有可执行的权限。


返回值:
     若所有欲核查的权限都通过了检查则返回 0 值,表示成功,只要有 一个权限被禁止则返回-1。

错误代码:
EEXIST 参数 pathname 所指的文件已存在,却使用了 O_CREAT和 O_EXCL 旗标
EACCESS 参数 pathname 所指的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数 pathname 指针超出可存取内存空间。
EINVAL 参数 mode 不正确。
ENAMETOOLONG 参数 pathname 太长。
ENOTDIR 参数 pathname 不是目录。
ENOMEM 核心内存不足。
ELOOP 参数 pathname 有过多符号连接问题。
EIO I/O 存取错误。

范例:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main(void)
{
    int fd,size;
    char s[]="This program is used to show how to use open(),write(),read() function.\nHave fun!\n";
    char buffer[80];
   
    fd = open( "temp.log", O_WRONLY|O_CREAT );//以可读写的方式打开一个文件,如果不存在则创建该文件

    if ( -1 == fd )
    {
        printf("Open or create file named \"temp.log\" failed.\n");
        return -1;
    }
    write( fd, s, sizeof(s) );//向该文件中写入一个字符串

    close( fd );
   
    fd = open( "temp.log", O_RDONLY );
    if ( -1 == fd )
    {
        printf("Open file named \"temp.log\" failed.\n");
        return -1;
    }
    size = read( fd, buffer, sizeof(buffer) );//读取文件内容保存到buffer指定的字符串数组中,返回读取的字符个数

    close( fd );
    printf( "%s", buffer );
   
    return 0;
}
分享到:
评论

相关推荐

    linux编程之pipe()函数详解

    对管道的读写与一般的IO系统函数一致,使用write()函数写入数据,使用read()读出数据。 #include int pipe(int filedes[2]); 返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述符。fd[0]:...

    linux网络编程-宋敬彬-part1

    9.2 使用IO函数的例子 246 9.2.1 客户端处理框架的例子 246 9.2.2 服务器端程序框架 248 9.2.3 使用recv()和send()函数 249 9.2.4 使用readv()和write()函数 251 9.2.5 使用recvmsg()和sendmsg()函数 253 ...

    Linux 2.6.11内核文件IO系统调用详解

    本文主要讲述的是文件I/O操作的2.6.11内核版本实现,包括了主要的数据结构、宏定义和函数流程。分别讲述open,create,close,read,write,lseek系统调用。

    虚拟还原功能的源代码

    IRP_MJ_READ,IRP_MJ_WRITE,IOCTL_FILE_DISK_OPEN_FILE,IOCTL_FILE_DISK_CLOSE_FILE这4种,在FileDiskThread中等待这4种事件发生,如果等到,就调用相应的函数处理。 四 应用层源码分析: 1 mount:调用...

    《行业创新创业项目实践实训》嵌入式家庭影音控制系统.doc

    1.文件IO操作:通过open函数打开特定的设备文件(如LCD屏幕、触摸屏、图片和音视频文件),通过read函数读取特定文件中的内容数据,通过write函数向管道文件(/fifo)中写入控制命令。 2.显示处理:打开并映射LCD...

    Python3 菜鸟查询手册

    03 基本数据类型.png 03.01 数据类型转换 int() 函数.png 03.02 数据类型转换 float() 函数.png 03.03 数据类型转换 complex() 函数.png 03.04 数据类型转换 str() 函数.png 03.05 数据类型转换 repr() 函数....

    APUE(UNIX环境高级编程)——文件I/O篇

    本章开始讨论UNIX系统,先说明可用的文件I/O函数——打开文件、读文件、写文件等等。...然后说明不同缓存器长度对read和write函数的影响。本章所说明的函数经常被称之为不带缓存的I/O(与标准I/O 函数相对照

    C语言程序设计标准教程

     fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指...

    Socket简介及使用

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –&gt; 读写write/read –&gt; 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些...

    python读写文件write和flush的实现方式

    打开文件用open,该函数创建一个文件对象,这将用来调用与之关联的其他支持方式。 file object = open(file_name [, access_mode][, buffering]) 下面是参数的详细信息: file_name: file_name参数是一个字符串值,...

    session在PHP大型web应用中的使用

    这时,函数bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )就是提供给我们解决这个问题的方案. 该函数使用的6个函数如下: 1. bool...

    13.第十三章 文件.txt

    使用fgetc函数后位置指针向后移动一个字节。因此可连续多次使用fgetc函数读取多个字符。文件指针是指向整个文件的,要在程序中定义说明,只要不重新赋值文件指针值不变。文件内部的位置指针用于指示文件内部的当前...

    2048游戏.rar

    因为是系统内的文件,采用系统IO函数实现,主要是open、read、write、lseek函数。同时 为了提高显示效率,还采用了mmap映射函数。 其次:该游戏需要判断出滑动的方向,来实现对相应图片的移动、合并操作,所以还...

    Go语言编程中对文件读写的基本方法整理

    1.func Copy(dst Writer, src Reader) (written int64, err error)这个函数是从一个文件读取拷贝到另外一个文件,一直拷贝到读取文件的EOF,所以不会返回io.EOF错误,参数是写入目标器和读取目标器,返回int64的拷贝...

    《Linux系统编程、网络编程》第1章:文件IO

    课程内容:什么是API,OS API与库API,open函数,read/write/close函数,lseek函数,进程表和文件描述符表,对文件进行共享操作,dup/dup2函数,fcntl函数

    linux内核 0.11版本源码 带中文注释

    以宏的嵌入汇编程序形式定义对io 端口操作的函数。 #include &lt;stddef.h&gt; // 标准定义头文件。定义了NULL, offsetof(TYPE, MEMBER)。 #include &lt;stdarg.h&gt; // 标准参数头文件。以宏的形式定义变量参数列表。主要...

    PHP使用Redis替代文件存储Session的方法

    本文实例讲述了PHP使用Redis替代文件存储Session的方法。分享给大家供大家参考,具体如下: PHP默认使用文件存储session...bool session_set_save_hanler(callback open,callback close,callback read,callback write,c

    OpenWRT-Util:OpenWRT 开发工具

    如果为’out’即可调用GPIO.write(value)函数,写入当然id端口,如果为’in’模式,只能调用GPIO.read()读取数值。 这里数值只能是0或1,非0即为1. 调用方式如下,这个存在一个可忽略的问题,一旦调用mode,数值将被...

    一个进程池的服务器程序

    一个进程池的服务器程序 下面做了非常简单的http服务器,该服务器只能接收Get请求。 流程大概如下: 1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe) 2,父进程预fork n个子进程 3,各个子...

    pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟值20160626_2201.7z

    通过/dev/i2c-n节点,用户可以在userspace直接访问板上的i2c外设寄存器,主要是透过I2C_RDWR这个IO控制命令将i2c_msg数组传递给kernel去执行。 开发板的/dev/i2c-1总线下挂有一片I2C的RTC:pcf8563。 root@android...

Global site tag (gtag.js) - Google Analytics