1. 概述: 2. 测试:
该demo主要实现linux下文件的基本操作, linux系统调用, 以及标准IO调用, 相关接口介绍可以参考<<UNIX环境高级编程>>
/* demo_file_open.c 文件编程demo(linux系统调用) 基本操作 : 创建, 打开, 关闭, 读写, 文件偏移量, 文件同步, 权限判断, 文件删除 */ #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdio.h> #define MAX_BUF 64 #define FILENAME "./test_open.txt" int main(int argc, char **argv){ int ret = -1; int fd = -1; char buf[MAX_BUF]; /* 创建文件 fd = creat(FILENAME, 700); */ /* fd : STDIN_FILENO/0(标准输入) STDOUT_FILENO/1(标准输出) STDERR_FILENO/2(标准错误) O_CREAT : 若此文件不存在, 则创建它 O_RDWR : 可读可写方式打开 O_RDONLY : 只读方式打开 O_WRONLY : 只写方式打开 O_APPEND : 追加 O_NONBLOCK : 非阻塞I/O */ fd = open(FILENAME, O_CREAT | O_RDWR | O_APPEND, 700); if(fd < 0){ /*printf("open:%sn", strerror(errno));*/ perror("open:"); return -1; } /* F_OK : 判断文件是否存在 X_OK : 判断对文件是否可执行权限 W_OK : 判断对文件是否有写权限 R_OK : 判断对文件是否有读权限 */ if(access(FILENAME, F_OK | W_OK | R_OK) < 0){ perror("access:"); goto err; } memset(buf, 0x0, sizeof(buf)); memcpy(buf, FILENAME, strlen(FILENAME)); if(write(fd, buf, strlen(buf)) < 0){ perror("write:"); goto err; } /* SEEK_SET : 参数offset即为新的读写位置 SEEK_CUR : 以目前的读写位置往后增加offset个位移量 SEEK_END : 将读写位置指向文件尾后再增加offset个位移量 返回值 : 若成功, 返回新的文件偏移量(可用于计算文件大小) */ if(lseek(fd, 0, SEEK_SET) < 0){ perror("lseek:"); goto err; } printf("buf = "); while(1){ memset(buf, 0x0, sizeof(buf)); ret = read(fd, buf, sizeof(buf)); if(ret < 0){ perror("read:"); break; } else if(ret == 0){ break; } printf("%s", buf); } printf("n"); fsync(fd); close(fd); //sync(); //unlink(FILENAME); return 0; err: fsync(fd); close(fd); //sync(); //unlink(FILENAME); return -1; }
/* demo_file_fopen.c.c 文件编程demo(标准IO调用) 基本操作 : 打开/创建, 关闭, 二进制IO读写, 文件偏移量, 文件同步 */ #include<unistd.h> #include <string.h> #include <stdio.h> #define MAX_BUF 64 #define FILENAME "./test_fopen.txt" int main(int argc, char **argv){ int ret = -1; FILE * fp = NULL; char buf[MAX_BUF]; /* FILE * file : 标准输入(stdin) 标准输出(stdout) 标准错误(stderr) r(read) : 读 w(write) : 写 a(append) : 追加, 若文件不存在, 则会建立该文件 t(text) : 文本文件 b(banary) : 二进制文件 + : 读和写 */ fp = fopen(FILENAME, "a+"); if(fp == NULL){ /*printf("fopen:%sn", strerror(errno));*/ perror("fopen:"); return -1; } /* 二进制IO读写 */ memset(buf, 0x0, sizeof(buf)); memcpy(buf, FILENAME, strlen(FILENAME)); if(fwrite(buf, strlen(buf), 1, fp) < 0){ perror("fwrite:"); goto err; } /* SEEK_SET : 文件的开头 SEEK_CUR : 文件指针的当前位置 SEEK_END : 文件的末尾 */ if(fseek(fp, 0, SEEK_SET) < 0){ perror("fseek:"); goto err; } printf("buf = "); while(1){ memset(buf, 0x0, sizeof(buf)); ret = fread(buf, sizeof(buf), 1, fp); if(ret < 0){ perror("fread:"); break; } else if(ret == 0){ printf("%s", buf); break; } printf("%s", buf); } printf("n"); fflush(fp); fclose(fp); sync(); return 0; err: fflush(fp); fclose(fp); sync(); return -1; }
#Makefile CC := gcc INCLUDE = -I /home/demo/include/ all: $(CC) demo_file_open.c $(INCLUDE) -o demo_file_open -Wall -Werror $(CC) demo_file_fopen.c $(INCLUDE) -o demo_file_fopen -Wall -Werror clean: rm demo_file_open demo_file_fopen
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算