文件操作一

1、在linux中,一切(几乎一切)都是文件,包括文件目录。磁盘文件、串行口、打印机和其他设备都是用相同的文件访问方式,很多情况下,访问只需要使用5个基本的函数:open、close、read、write和ioctl(把控制信息给设备驱动程序)。

2、所有用户通常使用上层的opendir/readdir接口来读取目录。

3、文件,除了本身包含的内容以外,它还有一个名字和属性,即“管理信息”,包括文件的创建/修改日期和它的访问权限。这些属性被保存在文件的inode(节点)中,这些节点是文件系统中的一个特殊数据块,同时包含文件的长度和文件在磁盘中的存放位置。系统使用的是文件的inode编号,目录结构为文件命名仅仅方便用户使用。

4、目录用于保存其他文件的节点号和名字的文件,目录文件中的每个数据项都是指向某个文件节点的链接,删除文件等于删除与只对应的目录项,同时指向该文件的链接数减1,但是文件数据仍可以通过其他指向该文件的链接访问到,如果指向某个文件的链接数(即ls -l)命令的输出中跟在访问权限后面的那个数字为0,就表示该节点以及其指向的数据不再被使用,磁盘上的相应位置就会被标记为可用空间。

5、可以将一个硬件设备映射为文件,作为超级用户,可以使用命令将IDE CD-ROM驱动器挂载为一个文件:

mount -t  iso9660 /dev/hdc  /mnt/cdrom

cd /mnt/cdrom

6、linux/unix中比较重要的三个设备文件:/dev/console, /dev/tty, /dev/null。

7、直接使用底层系统调用(open/read/write/close/ioctl)来进行输入输出操作的效率比较低,主要因为:(1)使用系统调用会影响系统的性能,由于需要从用户代码切换到内核代码,这种开销很大;(2)硬件会限制对底层系统调用一次所能读写的数据块大小。因此,为了给设备和磁盘文件提供更高层的接口,linux提供了一系统的标准函数库,可以让用户应用到自己的程序中。

8、底层文件访问。每个运行中的进程有一些与只关联的文件描述符,当一个程序开始运行时,它一般有3个已经打开的文件描述符:0: 标准输入;1:标准输出;2:标准错误。

9、标准输出示例

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(){
int len = strlen("hello,world!\n");
int rc = write(1,"hello,world!\n",len);//write to std-output
if(rc != len){
    write(2,"write failed..\n", 16);//2 - std-error
}

return 0;

}

10、从标准输入读取数据示例

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char buffer[128] = {0};
    int nread;
    nread = read(0, buffer, 128);
    if(nread==-1)
        write(2,"read errror!\n",16);
    if((write(1,buffer,nread))!= nread)
        write(2,"write error!\n",16);
    

    return 0;
}

test:

$ gcc -o simple_read simple_read.c
$ chmod +x simple_read
$ echo hello,world! | ./simple_read
hello,world!
$ ./simple_read < simple_write.c

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(){
    int len = strlen("hello,world!\n");
    int rc = write(1,$
//only get 128 bytes from simple_write.c, and $ is following behind

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值