读写操作

    xiaoxiao2025-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)