2017.9.17

2017.9.17

ReinWD(张巍)工作日志

下午2点开始整事
整日都在处理ArchLinux在VMware下的工作问题(反复重装无果,明日会跟进关注此问题。)

关于用户权限:

mode中的权限在头文件stat.h中被定义。
S_IR <---读取权限(开启)
S_IW <---写入权限
S_IX <---执行权限

2017.9.17_第1张图片
creat_test.png

成功配置了权限

在函数open(path,O_CREAT,mode)中将mode替换为相应的权限(可以使用或符号|连接多个权限)

3.6:

off_t seek(int fd, off_t offset, int whence);

函数作用:将fd指向的文件以whence的方式移动offset个字节。
返回值类型为off_t,此值在win下为长整值。

2017.9.17_第2张图片
seek_test.png

seek函数的测试

whence的类型:
SEEK_SET <---从头开始移动,如果offset为负值则返回-1,若超过文件长度则移动至offset处
SEEK_CUR <---从当前指向处开始移动,与set基本相同
SEEK_END <---从尾端开始移动,与上相同。

2017.9.17_第3张图片
seek_error.png

seek的结果小于0时返回-1

2017.9.17_第4张图片
seek_end_unknown.png

seek结果大于文件结尾后并没有什么卵用

可以通过seek函数创建一个含有“空洞”的文件,此文件不占用“空洞”内的空间

3.7:

ssize_t read(int fd, void *buff, size_t nbytes);

函数功能:将fd文件在offset处向后的nbytes字节读取至buff中。
返回值为成功读入的字节数,0代表已达到文件结尾,-1代表出错(比如offset=-1)。

3.8:

ssize_t write(int fd, const void *buf, size_t nbytes);

函数功能:将buff中的nbytes内容写入fd文件。
返回值通常与nbytes相同,否则通常是硬盘写满或者超过特定进程的文件最大长度。
如果nbytes大于buf长度,通常输出乱码(原因未知)

2017.9.17_第5张图片
write_test.png

输出的语句是(i,"0123456789",10)
直接使用i会有问题,应改成i+3(或者用一个变量接住open的返回值)。

3.9:

使用合适的BuffSize 可以提高读取的速率。
书中使用一个516 581 760字节的文件作测试,测试结果表明,在BuffSize到达磁盘块长度之后,缓冲区大小对读写速率已无明显影响

习题:

3.1

函数是带有缓冲机制的,在read和write的第二个参数中都有一个数组指针作参数用于缓冲。

小结:

今天被Arch差点整疯。。
果然直接使用物理硬盘给VMware不是一个很好的选择。
用虚拟磁盘重装之后问题基本全数解决。
明天开始就可以将C语言测试环境从win转移到Linux。

你可能感兴趣的:(2017.9.17)