一、表达式

逗号表达式

结果是其最右边表达式的值
表达式、文件 - 图2结果是9

二、文件

打开文件的常用模式有:

r,只读模式【默认】
w,只写模式【不可读;不存在则创建;存在则清空内容;】
a, 追加模式【可读; 不存在则创建;存在则只追加内容;】

fopen()文件顺利打开后,返回指向该流的文件指针,如果文件打开失败,则返回NULL,并将错误代码存储在errno中。
fclose()成功关闭可返回0,错误返回EOF并把错误存储在errno中。
fwrite():
表达式、文件 - 图3
输入为ifstream(也就是in file stream),输出为ofstream(out file stream)
fscanf通过文件指针fp从文件流中读取数据,fscanf(文件指针,格式字符串,输入表列);
fscanf函数与scanf函数的主要区别就是在fscanf函数中第一个形参是文件指针,其他参数与scanf完全相同。
FILE *f = fopen(“test.bin”, “wb”); //w读写,b二进制
读和写两种操作方式打开一个二进制文件:rb+
r代表read的简写,+代表可读可写,w代表write,b代表bit二进制位,t代表text。
fseek(fp,0,SEEK_END),将文件指针fp定位到文件末尾,ftell(fp),计算当前文件指针fp相对于文件头的距离
fseek(文件类型指针,位移量,起始点)
fwrite可以将整形转化为二进制数存储在文件中
fgetc函数——读成功,带回所读的字符,失败返回文件结束标志EOF(-1);
fputc函数——输出成果,返回值就是输出的字符,失败返回EOF;
fgets函数——读成功,返回地址str,失败返回NULL;
fputs函数——输出成果,返回0,失败返回非0;

A中ftell() 函数用于得到文件位置指针当前位置相对于文件首的偏移字节数;
B中fseek()函数用于设置文件指针的位置;
C中rewind()函数用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头;
D中ferror()函数可以用于检查调用输入输出函数时出现的错误。
r 打开只读文件,该文件必须存在。
r+ 打开可读可写的文件,该文件必须存在(这里的写文件是指将之前的文件覆盖。
rt 打开只读文本文件,该文本必须存在。
rt+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖。
rb 只读打开一个二进制文件,,该文本必须存在。
rb+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖。
w 打开只写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件(这里的读文件,同样需要使用rewind()函数)。
wt 打开只写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件。
wt+ 打开可读写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件。
wb 打开只写二进制文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件。
wb+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件。
a以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据,即追加内容。
a+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。
at二进制数据的追加,不存在则创建,只能写。
at+读写打开一个文本文件,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。
ab二进制数据的追加,不存在则创建,只能写。
ab+读写打开一个二进制文件,不存在则创建,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。

iOS::
表达式、文件 - 图4

管道pipe

pipe通过返回两个文件描述符比如fout、fin实现进程通信,

一次通信共涉及四次拷贝:
1、写入进程用户空间—写入进程内核空间;
2、写入进程内核空间—pipe内核空间
3、pipe内核空间—读入进程内核空间
4、读入进程内核空间—读入进程用户空间
另外,共享内存方式只涉及两次拷贝,
这也是共享内存比pipe、消息队列效率高的原因减少了系统调用以及拷贝次数