how to write a struct to a file directly?

Using write and read system call. Following is an example:

blk.h:

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

struct data{
    char s[20];
    int d1;
    char c;
};

#define BLK_SIZE 25

writeb.c:

#include "blk.h"

int main(){
    struct data *d= malloc(BLK_SIZE);
    d->d1= 8;
    d->c= ‘a‘;
    strcpy(d->s, "first try..");

    int fd= open("blk.dat", O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
    write(fd, d, BLK_SIZE);
    printf("writed!\n");
    close(fd);
    return 0;
}

readb.c:

include "blk.h"

int main(){
    int fd;
    struct data *d;
    fd= open("blk.dat", O_RDWR);
    read(fd, d, BLK_SIZE);
    printf("%d, %c, %s\n", d->d1, d->c, d->s);
    close(fd);
    return 0;
}
时间: 2024-10-15 05:24:31

how to write a struct to a file directly?的相关文章

简明python教程 --C++程序员的视角(八):标准库

os模块 这个模块包含普遍的操作系统功能. 如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. os.system() 执行linux命令 >> os.system('ls -l') 也可以使用subprocess模块 >> subprocess.call('ls -l'.split()) os.getcwd() 得到当前工作目录 os.getenv()和os.putenv() 读取和设置环境变量 os.lis

Non Lasting Storage File System、procfs、sysfs

catalog 0. 引言 1. proc文件系统 2. 简单的文件系统 3. sysfs 0. 引言 传统上,文件系统用于在块设备上持久存储数据,但也可以使用文件系统来组织.提供.交换并不存储在块设备上的信息,这些信息可以由内核动态生成,VFS的虚拟抽象层从架构上提供了这种功能,我们接下来着重讨论几种无持久存储的文件系统 1. proc文件系统(proc filesystem) 它使得内核可以生成与系统的状态和配置有关的信息,该信息可以由用户和系统程序从普通文件读取,而无需专门的工具与内核通信

VS之XML文件操作

XML,可扩展的标识语言(eXtensible Markup Language),具有多种优势,所以现在被广泛使用,本文通过一个简单的例子来实现对XML文件的保存和读取操作. 使用工具:VS2008 使用语言:C++ 开发步骤: 1.新建对话框程序 2.添加XML相关类 该类摘自网络 Markup.h // Markup.h: interface for the CMarkup class. // // Markup Release 8.2 // Copyright (C) 1999-2006

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux中文件描述符fd和文件指针flip的理解

转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp. open:文件描述符的操作(如: open)返回的是一个文件描述符(int fd),内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用(fd1,fd2,fd3...); fopen:而流(如: f

Linux下的 ls 命令的简单实现

又到了期末的时候,Linux实践课的老师挺厚道,布置了算是一个入门的大作业:实现一个简单版本的ls命令.三个文件,先上传再说. ls2.c #include <stdio.h> #include "ls_header.h" int main(int argc, char **argv) { // 处理参数, lsLong是带有 -l 参数的, lsShort为没有-l参数的ls命令 int i; if (argc == 1) { /* ls . */ lsShort(&qu

《Linux程序设计 第四版》之第三章的练习题

1.P103 一个目录扫描程序. #include<stdio.h> #include<dirent.h> #include<sys/stat.h> int isAdir(char* path); //判断路径是否是目录类型 void printdirs(char* path,int depth) //递归遍历打印文件与目录名 { DIR* dir=opendir(path); struct dirent* dirents; chdir(path); while(dir

人事管理系统 c语言版

int menu(){ printf("请按提示输入完成操作!\n"); printf("1.查询员工信息\n"); printf("2.统计员工数量\n"); printf("3.录入员工信息\n"); printf("4.删除员工信息\n"); printf("5.按id排序所有员工\n"); printf("6.打印所有员工信息\n"); printf(&quo

如何快速的把日志输出到磁盘上

不管是做客户端业务,还是做服务端业务,日志子系统都是非常重要的一个组件. 日志系统的输出目的地可以是disk,也可以是tty,更可以是network. 我的日志系统可以输出到tty,不同log level可以有不同的color,这样看日志非常的醒目,当然这里着重谈的是如何快速的把log内容写到磁盘上. 其实,如何快速的把log内容写到磁盘上,网上文章已经汗牛充栋,真正高质量的没多少,本篇可能也是狗尾续貂之作.不过,我的log子系统能够达到106M/s的输出速率. 详细介绍我的log系统之前,推荐