一、文件操作编程

        在linux操作系统下,实现文件操作有两个方法,一种是通过C语言库函数调用来实现,独立于操作系统,在任何操作系统中使用方法都相同;另一种是通过linux系统调用来实现,只能在linux操作系统中使用。

1.C语言库函数

(1)打开(fopen)和关闭(fclose)文件函数

        FILE *fopen(const char * filename.const char *mode);
        //参数filename表示打开的文件名(包括路径)
        //mode为文件打开模式

        int fclose(FILE *stream);

int main() {
    FILE *fp;
    fp = fopen("data.txt", "w");

    fclose(fp);
    return 0;
}

        常见文件打开模式如下表:

模式 含义
r,rb 只读打开,文件必须存在
r+,rb+ 读写打开,文件不存在则自动创建
w,wb 只写打开,文件不存在则自动创建
w+,wb+ 读写打开,文件不存在则自动创建
a,ab 追加打开,文件不存在则自动创建
a+,ab+

读和追加打开,文件不存在则自动创建

(2)读取文件数据函数

        读取文件数据可以用过fread,fgetc和fgets等函数实现,下面为一个例子:

        fread 的格式:size_t fread(void * ptr, size_t size, size_t n, FILE * stream);

        fgets 的格式:char * fgets(char * s, int size, FILE * stream);

        fgetc 的格式:int fgetc(FILE * stream);

int main() {
    //使用fread读取文件
    FILE *fp = fopen("data.txt", "r");
    char buffer_fread[100];
    size_t bytes_read = fread(buffer_fread, 1, 100, fp); 
    buffer_fread[bytes_read] = '\0'; //加上字符串结束符
    printf("读取到的内容:\n%s\n", buffer_fread);
    fclose(fp);

    //fgets按行读取
    fp = fopen("data.txt", "r");
    char buffer_fgets[50];
    while (fgets(buffer_fgets, sizeof(buffer_fgets), fp) != NULL) 
    {
        printf("读取到一行:%s", buffer_fgets);
    }
    fclose(fp);

    //使用fgetc逐个字符读取
    fp = fopen("data.txt", "r");
    int ch;
    while ((ch = fgetc(fp)) != EOF) 
    {
        printf("%c", ch); 
    }
    printf("\n");
    fclose(fp);

    return 0;
}

(3)向文件写数据函数

        向文件写数据可以通过fwrite,fputc和fputs等函数实现,下面为一个例子:

        fwrite格式:size_t fwrite(const void * ptr, size_t size, size_t n, FILE * stream);

        fputc格式:int fputs(const char * s, FILE * stream);

        fputs格式:int fputc(int c, FILE * stream);

int main() {
    FILE *fp;
    fp = fopen("output.txt", "w");

    //使用fputs写入字符串
    fputs("第一行:Hello, World!\n", fp);
    fputs("第二行:这是 fputs 写入的内容。\n", fp);

    //使用fputc写入单个字符
    fputc('\n', fp); // 写入一个换行符
    fputc('A', fp);  // 写入字符 'A'
    fputc('B', fp);  // 写入字符 'B'
    fputc('C', fp);  // 写入字符 'C'
    fputc('\n', fp); // 再写一个换行符

    //使用fwrite写入数据块
    char *message = "这是一条通过fwrite写入的完整字符串。\n";
    fwrite(message, 1, strlen(message), fp);  //写入 1 个大小为 strlen(message) 的块

    fclose(fp);
    return 0;
}

2.利用Linux系统调用函数完成文件操作

        C语言库中的fopen,fclose等函数其实都是由操作系统的API函数封装面来的,同样在Linux操作系统中也可以直接利用API函数完成文件操作变成,常用的有打开open,关闭close,写write,读read。

二、时间编程        

        在编程中经常要使用到时间,需要用到的时间函数都包含在time.h头文件中。

(1)time函数

        time_t time(time_t * tloc);

        功能:获取日历时间(比如获取从2000年1月1日到现在所经历的秒数),结果保存在tloc中,如果操作成功则返回值为经历的秒数,失败则返回值为((time_t)-1)。

(2)gmtime函数

        struct tm * gmtime(const time_t * timep);

        功能:将日历时间转化为格林威治标准时间,并将数据保存在tm结构中。

(3)gettimeofday函数

        int gettimeofday(struct timeval * tv,struct timezone * tz);

        功能:获取从今日凌晨到现在的时间差,并放到tv结构中,然后将当地时区的信息存到tz结构中。

(4)sleep函数和usleep函数

        unsigned int sleep(unsigned int sec);

        void usleep(unsigned long usec);

        功能:sleep函数使程序睡眠sec秒,usleep函数使程序睡眠usec微秒。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐