IO和进程线程相关知识点梳理(笔试面试题)

常用的IO接口函数

标准IO:fprint、fscanf、fputc、fgetc、fputs、fgets、fread、 fwrite、fopen、fclose、fseek、ftell、rewind。。。

文件IO:open、close、read、write、seek。。。

SEEK_SET: 文件头部

SEEK_END: 文件结束, EOF

SEEK_CUR: 当前位置

默认开启的:

stdin:标准输入指针(终端输入)

stdout:标准输出指针

stderr:标准出错指针

文件打开的方式,需要以以下字符开头的字符串

r 以只读的形式打开文件,文件光标定位在开头.如果文件不存在,则报错

r+ 以读写的形式打开文件,文件光标定位在开头.如果文件不存在,则报错 w 以只写的形式打开文件,如果文件存在,则清空文件内容,如果文件不存在,则创建该文件,文件光标定位在开头.

w+ 以读写的形式打开文件,如果文件存在,则清空文件内容,如果文件不存在,则创建该文件,文件光标定位在开头.

a 以追加的形式打开文件,如果文件不存在则创建文件,文件光标定位在结尾

a+ 以读或者追加的形式打开文件,如果文件不存在,则创建文件,如果第一次是读数据,则光标定位在开头,否则定位在结尾

返回值:成功调用返回打开的文件地址,失败返回NULL,并置位错误码

全缓存:有关普通文件指针对应的缓冲区,其大小位4096字节

向文件写的

全缓存的大小为:4096

2、程序结束后,会自动刷新全缓存

3、当文件指针关闭后,会刷新全缓存

4、当使用fflush函数刷新文件指针时,会刷新全缓存

5、当输入输出切换时,会刷新全缓存

6、当缓存区满了后,再放数据时,会刷新全缓存

行缓存:有关标准输入、标准输出指针对应的缓冲区

往终端写的

行缓存的大小为:1024

1、换行会刷新行缓存

2、程序结束后,会自动刷新行缓存

3、当文件指针关闭后,会刷新行缓存

4、当使用fflush函数刷新文件指针时,会刷新行缓存

5、当输入输出切换时,会刷新行缓存

6、当缓存区满了后,再放数据时,会刷新行缓存

不缓存:不缓存的大小为:0

fgets(buf, sizeof(buf), stdin); //从终端读取数据到buf中

buf[strlen(buf)-1] = '\0'; //将回车换成 '\0' 用于识别或对比

time_t time(time_t *tloc);系统时间函数

使用方式:time_t sys_time = time(NULL);

#include <myhead.h>
#include <time.h>
int main(int argc, const char *argv[])
{
    //定义变量存储秒数
    time_t sys_time = time(NULL);
    //将秒数转换为结构体
    struct tm *time_ptr = localtime(&sys_time);
    char buf[128] = ""; //存放转变后的字符串
    sprintf(buf, "%4d-%2d-%2d %2d:%2d:%2d\n",
            time_ptr->tm_year + 1900,
            time_ptr->tm_mon + 1,
            time_ptr->tm_mday,
            time_ptr->tm_hour,
            time_ptr->tm_min,
            time_ptr->tm_sec);
            
    printf("时间: %s\n", buf);

    return 0;
}

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:对文件进行模块化读写操作

参数1:要写入(存放数据)数据的起始地址(写入字符串的变量名)

参数2:每一项的大小

参数3:总的项数

参数4:文件指针

返回值:成返回读取的项数值,失败返回小于项数的值

注意:fread并不能区分是文件结束了,还是因为出现错误了,需要使用feof或ferror来区分

//可以直接写入结构体到文件
Stu s[3] = {{1001, "大狗", 30, 98}, \
           {1002, "二狗", 25, 100}, \
           {1003, "天明", 23, 80}};

//将这三名学生信息写入文件中
fwrite(s, sizeof(Stu), 3, fp);

读取也可以

fread(&temp, sizeof(temp), 1, fp);

    printf("学号:%d, 姓名:%s,年龄:%d,成绩%.2lf\n",\
            temp.numb, temp.name, temp.age, temp.score);

文件IO

特殊的文件描述符:0、1、2,分别对应了标准输入、标准输出、标准出错

stdin->_fileno ===> 0 ===> STDIN_FILENO

stdout->_fileno ===> 1 ===> STDOUT_FILENO

stderr->_fileno ===> 2 ===> STDERR_FILENO

文件打开标识 必须包含以下三者之一:

O_RDONLY:以只读的形式打开文件

O_WRONLY:以只写的形式打开文件

O_RDWR:以读写的形式打开文件

以下的可以选择性加入,使用位或完成:

O_CREAT:如果文件存在,就直接打开,如果文件不存在,则创建文件,此时,参数3必须要加,表示创建的文件权限

O_TRUNC:表示清空文件内容

O_APPEND:以追加的形式打开文件

O_EXCL:确保打开的是不存在的文件,通常跟O_CREAT一起使用,表示本次操作必须创建新文件,如果文件存在,则open函数报错,错误码为:EEXIST

"r":O_RDONLY
"r+":O_RDWR
"w":O_WRONLY|O_CREAT|O_TRUNC
"w+":O_RDWR|O_CREAT|O_TRUNC
"a":O_WRONLY|O_APPEND|O_CREAT
"a+":O_RDWR|O_APPEND|O_CREAT

mode :

普通文件权限一般为:0664 目录文件权限一般为:0775

lseek(fd, 0, SEEK_END)返回值是文件大小(long)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值