unbuffered 文件I/O

   unxi shell是文件描述符0,1,2分别与标出输入,标准输出,标准错误相结合。

      在POSIX.1应用程序中,在头文件<unistd.h>定义了STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO这3个常量来进行对应。

      int open(const char *pathname,int oflag,....)    ----出错为-1

             open函数打开pathname指定的文件,并且返回最小的未用的描述符数字。例如可以先关闭标准输出,然后打开另外一个文件,这时这个文件的描述符=1.

      int creat(const char *pathname,mode_t mode)   ----出错为-1

            此函数相当于open(pathname,O_WRONLY|O_CREAT|O_TRUNC,mode),它的不足之处在于是用只读的方式打开该文件。 如果创建一个文件,在里面写入内容,并且要读取出来,这时候必须要先关闭该文件,然后重新打开。

     int  close(int fid)   -----成功返回0,否则-1

         当关闭文件时也将释放该进程在该文件上的所有记录锁。当一个进程结束时,它所有打开的文件都会由内核自动关闭,所以也可以不显式调用close来关闭打开的文件。

    off_t lseek(int fid,off_t offset,int whence)   ---成功返回新的文件位移,出错则为-1

         whence可以为以下3种情况:

               SEEK_SET:将文件的位移量设置为开始处+offset

               SEEK_CUR:将文件位移量设置为当前值+offset(offset可正可负)

               SEEK_END:将文件位移量设置为文件长度+offset(offset可正可负),如果文件位移量大于文件长度并对其进行写操作,中间的空洞都会被读为0

    ssize_t read(int fid,void * buff,size_t nbytes)  ---成功返回读的字节数,若到末尾返回0,出错为-1

    ssize_t write(int fid,const void * buff,size_t nbytes)  ---成功返回已写字节数,出错为-1

原子操作:

       当在一个程序中打开多个进程对同一文件进行操作(fork创建的子进程会复制父进程的进程表项)时,可能会造成共享冲突,这时候应该尽量使用原子操作的函数。

fctl函数的作用:

     当文件描述符是被shell打开并以参数形式传递给程序时,我们不能使用open对其进行状态设置(不知道文件名),这个时候则可以使用fctl函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值