读写操作
来源:互联网 发布:python 元组 相等 编辑:程序博客网 时间:2024/05/21 22:55
/**
* @file demo1.c
* @Synopsis file open operation
*
* 和标准C区别
* open
* read
* write
* close
*
* typedef struct FILE{
*
* }*FILE
*
* FILE *fopen(const char *path,const char *mode);
* @return 地址
*
* int open(const char *pathname,int flags);
* @return 整形,执接返回文件描述符不再是文件对象了
*
* int open(const char *pathname,int flags,mode_t mode);
* const char *pathname 和C相同
* int flags
* O_RDONLY 以只读方式打开
* O_WRONLY 以只写方式打开
* O_RDWR 以读写方式打开
* 上面三个参数必需定一个,且只能定一个
*
* 与第三个参数 按位或的操作
* O_APPEND 表示追加,如果文件己有内容,这次打开文件所定的数据附加到文件的末尾而不覆盖原来的内容
* O_CREAT 若此文件不存在则创建它。使用些选项时需要提供第三个参数 mode,表示访问权限
* O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错
* O_TRUNC 如果文件存在,而且为只写或可读可写成功打开,则将其长度截断(Truncate)哦0
* O_NONBLOCK 对于设备文件,以O_NONBLOCK 方式打开可以做非阻塞I/O(Nonblock I/O);
* 0101000011.....
* O_RDONLY|O_WRONLY pass 111....1101..
* mode_t mode
* 是文件的rwx 权限,可以用八进制数表示,比如 0644 表示 rw-r--r--,也可以用 S_IRUSR,S_IWUSR
* 等宏定义按位或起来表示
* umask 022 0664&~022 = (110 110 110&~000 010 010) = (110 110 110 & 111 101 101)
*
* 0664 110 110 100 rw-rw-r--
*
*
* ssize_t read(int fd,void *buf,size_t count);
* @param int fd 文件描述符
* @param void *buf
* void & void * void * 指的是泛型 ,void 指的是没有反回值,就是空
* void * 可以取任意类型,不限定类型,不管什么类型,都按一个一个字节处理
* @return ssize_t ...typedef...
* size_t & ssize_t 无符号与有符号区别 ssize_t 可能为负数
* ssize_t <= count
* error ssize_t=-1
* ssize_t = 0 没有东西
* ssize_t write(int fd,const void *buf,size_t count);
* ssize_t<=count 实际写了多少个,就反回多少个
*
* int close(int fd);// ********
* @param size_t count
*
*
* @author MrClimb
* @version 1.1.0
* @date 2012-05-08
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
/* *************************************************************** */
/**
* @Synopsis 以只读方式打开一个不存在的文件
*/
/* *************************************************************** */
void test1()
{
int fd=0;
fd = open("testfile",O_RDONLY);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open testfile");
exit(EXIT_FAILURE);
}
printf("success fd = %d\n",fd);
// NO such file or directory
}
/* *************************************************************** */
/**
* @Synopsis 以只写方式打开一个己存在的目录。注意,如果用open 打开一个目录,目录名的末尾可以加 '\'也可以不
* 加'\',这一点和fopen 函数一样
*/
/* *************************************************************** */
void test2()
{
int fd=0;
fd = open("/t20120508/",O_WRONLY);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open t20120508 dir");
exit(EXIT_FAILURE);
}
// open return 3
printf("success fd = %d\n",fd);
}
/* *************************************************************** */
/**
* @Synopsis 在当前目录下读写一个文件,如果文件不存在则创建之,但是不巧
* 当前目录下己有一个同名子目录
*/
/* *************************************************************** */
void test3()
{
int fd = 0;
fd = open("./demo1.txt",O_RDWR|O_CREAT,0644);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open demo1.txt");
exit(EXIT_FAILURE);
}
printf("success fd = %d\n",fd);
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,用于写操作,以追加方式打开
*/
/* *************************************************************** */
void test4()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_APPEND);// O_CREATE
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,用于写操作,如果该文件不存在则创建它
*/
/* *************************************************************** */
void test5()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_CREAT);
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,如果该文件己存在则截断它,如果该文件不存在则创建它
*/
/* *************************************************************** */
void test6()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_TRUNC|O_CREAT);//
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
int main(int argc, char **argv)
{
#if 0
test1();
#endif
#if 0
test2(); ////////////////////????
#endif
#if 0
test3();
#endif
#if 0
test4();
#endif
#if 0
test5();
#endif
#if 0
test6();
#endif
return EXIT_SUCCESS;
}
* @file demo1.c
* @Synopsis file open operation
*
* 和标准C区别
* open
* read
* write
* close
*
* typedef struct FILE{
*
* }*FILE
*
* FILE *fopen(const char *path,const char *mode);
* @return 地址
*
* int open(const char *pathname,int flags);
* @return 整形,执接返回文件描述符不再是文件对象了
*
* int open(const char *pathname,int flags,mode_t mode);
* const char *pathname 和C相同
* int flags
* O_RDONLY 以只读方式打开
* O_WRONLY 以只写方式打开
* O_RDWR 以读写方式打开
* 上面三个参数必需定一个,且只能定一个
*
* 与第三个参数 按位或的操作
* O_APPEND 表示追加,如果文件己有内容,这次打开文件所定的数据附加到文件的末尾而不覆盖原来的内容
* O_CREAT 若此文件不存在则创建它。使用些选项时需要提供第三个参数 mode,表示访问权限
* O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错
* O_TRUNC 如果文件存在,而且为只写或可读可写成功打开,则将其长度截断(Truncate)哦0
* O_NONBLOCK 对于设备文件,以O_NONBLOCK 方式打开可以做非阻塞I/O(Nonblock I/O);
* 0101000011.....
* O_RDONLY|O_WRONLY pass 111....1101..
* mode_t mode
* 是文件的rwx 权限,可以用八进制数表示,比如 0644 表示 rw-r--r--,也可以用 S_IRUSR,S_IWUSR
* 等宏定义按位或起来表示
* umask 022 0664&~022 = (110 110 110&~000 010 010) = (110 110 110 & 111 101 101)
*
* 0664 110 110 100 rw-rw-r--
*
*
* ssize_t read(int fd,void *buf,size_t count);
* @param int fd 文件描述符
* @param void *buf
* void & void * void * 指的是泛型 ,void 指的是没有反回值,就是空
* void * 可以取任意类型,不限定类型,不管什么类型,都按一个一个字节处理
* @return ssize_t ...typedef...
* size_t & ssize_t 无符号与有符号区别 ssize_t 可能为负数
* ssize_t <= count
* error ssize_t=-1
* ssize_t = 0 没有东西
* ssize_t write(int fd,const void *buf,size_t count);
* ssize_t<=count 实际写了多少个,就反回多少个
*
* int close(int fd);// ********
* @param size_t count
*
*
* @author MrClimb
* @version 1.1.0
* @date 2012-05-08
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
/* *************************************************************** */
/**
* @Synopsis 以只读方式打开一个不存在的文件
*/
/* *************************************************************** */
void test1()
{
int fd=0;
fd = open("testfile",O_RDONLY);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open testfile");
exit(EXIT_FAILURE);
}
printf("success fd = %d\n",fd);
// NO such file or directory
}
/* *************************************************************** */
/**
* @Synopsis 以只写方式打开一个己存在的目录。注意,如果用open 打开一个目录,目录名的末尾可以加 '\'也可以不
* 加'\',这一点和fopen 函数一样
*/
/* *************************************************************** */
void test2()
{
int fd=0;
fd = open("/t20120508/",O_WRONLY);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open t20120508 dir");
exit(EXIT_FAILURE);
}
// open return 3
printf("success fd = %d\n",fd);
}
/* *************************************************************** */
/**
* @Synopsis 在当前目录下读写一个文件,如果文件不存在则创建之,但是不巧
* 当前目录下己有一个同名子目录
*/
/* *************************************************************** */
void test3()
{
int fd = 0;
fd = open("./demo1.txt",O_RDWR|O_CREAT,0644);
if(fd<0)
{
printf("failure fd = %d\n",fd);
perror("open demo1.txt");
exit(EXIT_FAILURE);
}
printf("success fd = %d\n",fd);
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,用于写操作,以追加方式打开
*/
/* *************************************************************** */
void test4()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_APPEND);// O_CREATE
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,用于写操作,如果该文件不存在则创建它
*/
/* *************************************************************** */
void test5()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_CREAT);
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
/* *************************************************************** */
/**
* @Synopsis 打开文件,如果该文件己存在则截断它,如果该文件不存在则创建它
*/
/* *************************************************************** */
void test6()
{
int fd=0;
fd = open("./demo1.txt",O_WRONLY|O_TRUNC|O_CREAT);//
if(fd<0)
{
perror("file demo1.txt");
exit(EXIT_FAILURE);
}
}
int main(int argc, char **argv)
{
#if 0
test1();
#endif
#if 0
test2(); ////////////////////????
#endif
#if 0
test3();
#endif
#if 0
test4();
#endif
#if 0
test5();
#endif
#if 0
test6();
#endif
return EXIT_SUCCESS;
}
0 0
- 读写操作
- 文件读写操作
- 另一个文件读写操作
- 读写模版的操作
- xml的读写操作
- [C++]文件读写操作
- 读写文件操作
- xml文件操作( 读写)
- 文件的读写操作
- 文件的读写操作
- nandflash的读写操作
- Nand读写操作
- C#操作注册表(读写)
- Nand读写操作
- WINCE 读写注册表操作
- 文件读写常用操作
- JAVA读写操作
- 二进制读写图片操作
- 智能化到底能给实体店带来什么?
- Android调用系统直接拨打电话功能
- MySQL---数据库从入门走向大神系列(十三)-BasicDataSource创建DataSource(DBCP连接池配置)
- 学习开源项目源码,培养真才实学
- Java序列化与反序列化
- 读写操作
- Eclipse使用Git基本流程
- CSS3弹性伸缩布局(二)——flex布局
- 数据预处理之独热编码(One-Hot Encoding)
- codeforce 120F 【树的直径】
- OJ题:将一个数倒置输出
- 1717 小数化分数2
- 给LinearLayout设置动画(可以逐条出来动画效果)
- AndroidScannerDemo移植总结