unix第三章高级环境编程总结

#inlcude<unist.d>
ssize_t read(int fd, void * buf, size_t nbytes);

文件I/O
1.文件描述符<unistd.h
STDIN_FILENO -- 0

STDOUT_FILENO --1

STDERR_FILENO -- 2
文件描述符变化在 0 — OPEN_MAX -1 
2函数open和openat
#include<fcntl.h>
int open(const char * path, int oflag, .../*mode_t mode */);
int openat(int fd, const char * path, int oflag, .../* mode_t mode*
函数错误返回 -1 ,成功返回 文件描述符


将最后一个参数写....ISO C 用这个方法表示余下的参数的数量和类型是可变的。对于open函数,只有当新创建文件时,才使用最后这个参数。 
oflag参数:
O_RDONLY  // 只读打开
O_WRONLY //  只写打开
O_RDWR // 读写打开
O_EXEC  //只执行打开
O_SEARCH // 只搜索打开(应用于目录) 个人认为是目录的执行位。此常量在于目录打开时验证他的搜索权限,对目录文件的后继操作就不需要再次检查该目录的搜索权限。
上面五个常量只能指定一个,且必须指定一个。下面的为可选:
O_APPEND,O_CLOEXEC(将FD_CLOEXEC设置为文件描述符标志,若设置此标志,fork时候,关闭此文件描述符。),O_CREATE,O_DIRECTORY(若路径引用的不是目录,则出错。) O_EXC(如果同时指定了O_CREATE,而文件已经存在,则出错。如果不存在,则创建此文件。这使得测试和创建成为原子操作)。

O_NOCTTY (如果path引用的是终端文件,则不讲该终端设置为该进程的控制终端) O_NOFOLLOW(如果path引用的是一个符号链接,则出错。) O_NONBLACK(如果符号打开的是FIFO,一个块特殊文件,或一个字特殊文件,则此选项为文件的本次打开和后面的I/O操作设为非阻塞方式)。O_SYNC(使每次等待物理的i/o操作完成,包括由该write操作引起的文件属性更新所需的i/o)。O_TRUNC(文件若存在,而且只写或读写打开,则长度截断为0)。O_TTY_INIT(如果打开一个未打开的终端I/o,设置非标准termios参数值)。


 
O_DSYNC :使得write要等待物理完成,但是如果该写操作并不影响读取刚写入的数据,则不需要等待文件属性被更行
O_SYNC和O_DSYNC : 仅当文件属性需要更行以反映文件数据变化(比如更新文件以反映文件中包含了更多的数据)时,O_DSYN标志才影响文件属性。而设置O_SYNC标志后,数据和属性总是同步更新。当文件使用O_DSYNC,在重写其现有部分时,文件属性不会更新。
O_SYNC 使每一的文件描述符作为参数进行的read操作等待,直至所有对文件的的同一部分挂起的写操作完成。
 

fopen和open的关系:

fd指定为AT_FDCWD,路径名在当前工作目录获取。

3函数create
#include<fcntl.h>
int create(const char* pathnane, mode_t);
成功返回只写的文件描述符。若出错,则返回-1.
open(path, O_WRONLU | O_CREAT | O_TRUNC, mode);


4关闭文件描述符 

#include<unistd.h>
int close(int fd);
若成功,则返回0,失败返回-1。

3.6函数lseek
每一个打开文件都有一个与其相关联的“当前文件偏移量”,(当前文件偏移量显示在文件表项中)
#include<uistd.h>
off_t lseek(int fd, off_t offset, int whence);
成功返回新的文件偏移量,c出错返回-1.
whence : SEEK_SET,则将文件偏移量设置为据文件开始处的offset个字节。
         SEEK_CUR,则将文件的偏移量设置为当前值加offset,offset可为负
         SEEK_END,则将文件的偏移量设置为文件长度加offset,offset可正可负。

文件中的空洞:写的偏移量大于当前文件长度。不分配磁盘。

3.7,3.8write 和read

#include<unistd.h>
ssize_t read(int fd, void * buf, size_t nbytes);
返回读到的字节数,若到达文件尾,返回0,出错返回-1.
#include<unistd.h>
ssize_t write(int fd, const void * buf ,ssize_t nbytes);
成功返回写的字节数,出错返回-1.


3.10文件共享
进程表项文件表项和V节点表项(v节点结构是为了在一个计算机系统上的多文件类型支持的)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值