linux操作系统文件IO

linux:文件描述符 整数
 如果有文件被某个程序访问。那么程序中就有文件描述符。
 进程:一个运行中的程序。
 标准输入设备文件 0
 标准输出设备文件 1
 标准错误输出设备文件 2
 这三个设备文件都是终端设备驱动产生的驱动设备文件。
 这三个文件描述符都代表终端。
 创建一个进程,使用getpid打印进程编号,然后进入/proc/$(pid)/fd目录。

ctrl + c   杀死进程并重启shell
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
sys/types.h   中保存了一些linux自定义的类型名和宏名
 sys/stat.h 中保存了一些用来获得文件,进程等状态的函数。
 #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    flags:标识 打开方式
      O_RDWR    可读可写
     O_RDONLY  只读
     O_WRONLY  只写
     O_CREAT   创建
     O_EXCL    只可创建一次
     O_APPEND  追加

    mode:权限  文件的权限
     S_IRUSR | S_IWUSR
    int open(const char *pathname, int flags);
     打开一个文件并返回文件的描述符号   fd
    int open(const char *pathname, int flags, mode_t mode);
     创建或者打开一个文件并返回fd
    int creat(const char *pathname, mode_t mode);
     和两个参数的open相同

    00000   文件拥有者
    0777    当前用户
    777     os决定  默认

    如果失败  返回-1
    成功 返回带回的东西或者0
    在os内核中,有一块区域专门保存进程中的错误信息,我们称之为错误输出缓冲区
      这个区域的内容可以使用perror函数输出或者printf的%m占位符替代。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#include <unistd.h>
    ssize_t read(//返回-1表示失败 返回0表示成功但没读到东西 正数表示读到了几个字节
    int fd,   //读取的文件的文件描述符号
    void *buf,   //读到的数据保存地址
    size_t count); //字节数  大小
    ssize_t  write(
    int  fd, 
    const void* buf,
    size_t count);

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
写一个结构体到文件
#include <stdio.h>
#include <unistd.h>//write
#include <fcntl.h>//open
#include <stdlib.h>//%m
//1 声明结构体
struct student{
 char name[20];
 int age;
 char sex;
 double score;
};
int main(){
 char filename[20] = "student.dat";
 //2 定义并初始化结构体
 struct student stu = {"测试",3,'f',33.33};
 //3 创建并打开文件
 int fd = open(filename,O_WRONLY | O_CREAT,0666);
 if(-1 == fd)
  printf("创建并打开文件%s失败:%m\n",filename),exit(-1);
 printf("打开文件%s %m!\n",filename);
 //4 写入信息
 int r;
 r = write(fd,&stu,sizeof stu);
 if(r>0){
  printf("write %m!\n");
 }
 //5 关闭文件
 close(fd);//在进程将要结束的时候,os会自动关闭进程打开的所有fd
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值