首页
IT
登录
6mi
u
盘
搜
搜 索
IT
读写操作
读写操作
xiaoxiao
2025-09-20
565
/** * @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; }
转载请注明原文地址: https://ju.6miu.com/read-1302847.html
最新回复
(
0
)