linux 文件 基本使用

1. 概述:
该demo主要实现linux下文件的基本操作, linux系统调用, 以及标准IO调用, 相关接口介绍可以参考<>
linux 文件 基本使用_第1张图片linux 文件 基本使用_第2张图片

2. 测试:
linux 文件 基本使用_第3张图片

/*
file_tip.h
格式化I/O输出和输入相关接口介绍

*/
#include 

/******************************格式化I/O输出*************************************/
int printf(const char *restrict format, ...);

int fprintf(FILE *restrict fp, const char *restrict format, ...);

int dprintf(int fd, const char *restrict format, ...);
                /* 3个函数返回值:若成功,都返回输出字符数;若输出出错,都返回负值 */

int sprintf(char *restrict buf, const char *restrict format, ...);
                /* 返回值:若成功,返回存入数组的字符数;若编码出错,返回负值 */

int snprintf(char *restrict buf, size_t n, const char *restrict format, ...);
                /* 返回值:若缓冲区足够大,返回将要存入数组的字符数;若编码出错,返回负值 */

/******************************格式化I/O输入*************************************/
int scanf(const char *restrict format, ...);

int fscanf(FILE *restrict fp, const char *restrict format, ...);

int sscanf(const char *restrict buf, const char *restrict format, ...);
                /* 3个函数返回值:赋值的输入项数;若输入出错或在任一转换前已到达文件尾,都返回 EOF */
/*
demo_file_open.c
文件编程demo(linux系统调用)
基本操作 : 创建, 打开, 关闭, 读写, 文件偏移量, 文件同步, 权限判断, 文件删除

*/
#include 
#include 
#include 
#include 

#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:%s\n", 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
#include 
#include 

#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:%s\n", 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

你可能感兴趣的:(linux,文件)