文件的操作

open返回一个文件描述符int 
open(const char *path ,int  flage)
int open(const char *path , int flags,mode _t mode);
可以自定义打开形式例如
(O_WRONLY|O_CREAT,0600(权限问题))
第三个参数是因为无文件时创建产生的权限问题
方
read()
write()
(linux程序设计)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
        int count;
        int fr=open("/etc/passwd",O_RDONLY);
        int fw=open("./newpasswd",O_WRONLY | O_CREAT,0600);
        assert(fr!=-1&&fw!=-1);
        char buff[128]={0};
        while(count=(read(fr,buff,127))>0)
        {
                write(fw,buff,count);
        }
        close(fr);
        close(fw);
        return 0;
}

0.标准输入
1.标准输出关闭没东西输入如果打开之后print直接在文件中输出;
2.标准错误
printf()函数内部实现 在库中调用系统调用函数;

最多打开1024 个文件;
用户态(用户自己的代码在用户态)
通过软件上的中断(现场保护直接进入系统调用)
(内核帮助实现文件的读写)
内核态(系统所进行的在内核态)
系统调用在内核态(linux 内核设计及实现)
文件共享(unix环境高级编程)(不同进程共享打开文件)
进程 打开 文件 将文件描述符放到文件描述表中文件描述表默认打开三个 标准输入 标准输出 标准错误找到所对应的文件表对文件进行操作;文件表可以访问文件节点;
fork之后()相当与不同的进程访问同一个文件
复制之后虽然文件标示符相同(比如两个相同的程序)但是,但属于不同的pcd中文件描述表中所对应的文件表的不是同一个,文件表中有{文件的状态,文件的偏移量,文件的节点位置,文件访问模式,对该文件i-node对象的引用(有多少个进程访问该文件表)}
多个进程通过文件表连接节点,当close其中任意一个其他的都不会关闭(它只是销毁了自己当前进程的文件表而已。其他文件表不变 相当一去除了文件描述符表中的这一项))该进程表中的文件表因为是不属于同一个文件表,一个进程只有一个文件描述表在用户空间中;文件表是在打开文件时产生当,当文件表的引用次数为0时文件表销毁相当与关闭所有与该文件表相连的文件描述符
当进程打开一个文件时才创建文件表;
(父子进程用的是若在fork()共享文件表信息,类似于两个进程表都指向同一个个文件表一个改变文件的偏移量另一个也会改变 )pcd中所存储的是同一个文件表
当文件表中的计数器为0是销毁该文件表‘
(c语言中提供的fclose 不能关闭两次他是指的是我打开了一个文件关闭的是他pcd表中的那个文件描述表(指针))
以下例子:
	**************************************************************************************
	在fork()之后在open将相当与在两个pcd中分别定义了两个相同的文件表都指向相同的节点但文件表中的信息不一样,所以pcd是链式连接
	
        pid_t pid=fork();
        assert(fr!=-1);
        int fr=open("./file",O_RDONLY);
     
        if(pid==0)
        {
                char buff[128]={0};
                read(fr,buff,1);
                printf("%s",buff);
                read(fr,buff,1);
                printf("%s",buff);

        }
        else
        {
                char buff[128]={0};
                read(fr,buff,1);
                printf("%s",buff);
                read(fr,buff,1);
                printf("%s",buff);
        }
        exit(0);
}

关闭标准输入所printf的函数都出现在
当前所fw打开的文件里面
   1 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <assert.h>
  4 #include <stdlib.h>
  5 #include <fcntl.h>
  6 int main()
  7 {
  8     close(1);
  9     int fw=open("./file",O_WRONLY | O_CREAT,0600);
 10     assert(fw!=-1);
 11     printf("helloworld");
 12     exit(0);
 13 }
 14 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值