使用open_read_write等底层函数来赋值一个文件
/*
* 该程序是练习read(),write(),open(),create(),close(),lseek()等函数。
*
* 该程序的处理思路:
* 1: 在程序所在的目录去打开一个文件,如果该文件不存在,则创建他。
* 2:然后读取/etc/passwd文件的内容,并将内容写入打开的文件。
* 3:关闭/etc/passwd文件和目的文件
* */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define BUFFER_SIZE 1024
int main(int argc, char ** argv)
{
char chErrMsg[BUFFER_SIZE] = {0};
sprintf(chErrMsg,"process begin @ [%p]\n",(void*)&main);
write(STDOUT_FILENO,chErrMsg,strlen(chErrMsg)); //向标准输出终端中输出提示信息。
//printf("%s",chErrMsg); write和printf同时使用的时候,打印到终端上的日志信息有可能和程序的处理顺序不一致。原因,大概是write没有缓存,printf有缓存。
int nSrcPasswd = open("/etc/passwd", O_RDONLY); //以只读模式打开 /etc/passwd 文件。
if(nSrcPasswd <= 0)
{
sprintf(chErrMsg,"%s","can not open file [/etc/passwd]\n");
write(STDERR_FILENO,chErrMsg, strlen(chErrMsg)); //向标准错误终端中输出提示信息。
return -1;
}
else
{
sprintf(chErrMsg,"%s","open file [/etc/passwd]...\n");
write(STDOUT_FILENO,chErrMsg,strlen(chErrMsg));
}
char chOutFileName[256] = {0};
sprintf(chOutFileName,"%s","file.out");
int nDestFile = open(chOutFileName,O_WRONLY|O_APPEND); //以写和追加模式打开文件 file.out
if(nDestFile <= 0)
{
sprintf(chErrMsg,"%s","can not open file [file.out]. try to create it.\n");
write(STDERR_FILENO,chErrMsg, strlen(chErrMsg));
nDestFile = creat(chOutFileName,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); //创建一个新文件
if(nDestFile <= 0)
{
sprintf(chErrMsg,"%s","can not creat file [file.out].\n");
write(STDERR_FILENO,chErrMsg, strlen(chErrMsg));
close(nSrcPasswd);
return -2;
}
}
int size = 0;
char chBuffer[BUFFER_SIZE + 1] = {0};
while((size = read(nSrcPasswd, chBuffer, BUFFER_SIZE)) > 0) //从文件中读取 1024 个信息到chBuffer中
{
sprintf(chErrMsg,"%s","\n===========================\n");
write(STDOUT_FILENO,chErrMsg,strlen(chErrMsg));
write(STDOUT_FILENO,chBuffer,strlen(chBuffer)); //将信息写入标准输出终端
if((size = write(nDestFile,chBuffer,strlen(chBuffer))) != size) //将信息写入目标文件
{
sprintf(chErrMsg,"%s","can not write msg to dest file\n");
write(STDOUT_FILENO,chErrMsg,strlen(chErrMsg));
close(nDestFile);
close(nSrcPasswd);
break;
}
memset(chBuffer,0x00,sizeof(chBuffer));
}
sprintf(chErrMsg,"%s","\n===========after seek set================\n");
write(STDOUT_FILENO,chErrMsg,strlen(chErrMsg));
lseek(nSrcPasswd,BUFFER_SIZE,SEEK_SET); //重新设定文件内容指示符的偏移量
if((size = read(nSrcPasswd,chBuffer,BUFFER_SIZE)) > 0)
{
write(STDOUT_FILENO,chBuffer,strlen(chBuffer));
}
close(nDestFile); //关闭文件
close(nSrcPasswd);
return 0;
}
使用open_read_write等底层函数来赋值一个文件的更多相关文章
- PHP通过copy()函数来复制一个文件
PHP通过copy()函数来复制一个文件.用法如下: bool copy(string $source, string $dest) 其中$source是源文件的路径,$dest是目的文件的路径.函数 ...
- 一个php函数,能够遍历一个文件夹下的所有文件和子文件夹
<?phpfunction my_scandir($dir){ $files=array(); if(is_dir($dir)) { if($handle=op ...
- VC如何得到一个文件夹的路径
VC中没有现成的函数来选择一个文件夹,但这是经常会用到的,怎么办?自动动手,丰衣足食! 使用SHBrowseForFolder,代码如下: #include int SelFolder(HWND ...
- C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
C++构造函数和析构函数 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!! (1)构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹 ...
- JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
JavaScript在页面中的执行顺序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 阅读数 ...
- Redis底层函数详解
Redis底层函数详解 serverCron 函数 它负责管理服务器的资源,并维持服务器的正常运行.在执行 serverCron 函数的过程中会调用相关的子函数,如 trackOperationsPe ...
- Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型
11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...
- Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL
没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.a ...
- 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。
split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...
随机推荐
- Linux服务器iops性能测试-fio
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...
- pdoModel封装
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2017/7/24 * Time: 14:03 */ /** * 数 ...
- Java 中的会话管理—— HttpServlet,Cookies,URL Rewriting(转)
索引 1.什么是 Session? 2.Java 中的会话管理—— Cookie 3.Java Servlet 中的 Session —— HttpSession 理解 JSESSIONID Cook ...
- Django框架之自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输入页码(第一页.第二页...) 3.根据设定的每页显示条数和当 ...
- 主攻ASP.NET.4.5.1 MVC5.0之重生:根据产品类别显示菜单分类和分页
路径访问的几种方式和分页效果 显示其它类别的效果和多数据分页效果 默认访问网站路径效果和多数据分页效果 URL路径访问可页面 http://localhost:5339/stationery http ...
- Class文件结构(更新中)
Class文件是一组以8位字节为单位的二进制流,当遇见需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储. 格式,采用伪结构,只有两种数据结构:无符号数和表. 无符 ...
- Cocos2d-x项目移植到WP8系列之五:播放MP3
原文链接: http://www.cnblogs.com/zouzf/p/3972549.html 这一块的细节还是不太了解,只是东凑西拼能跑起来而已 1.网上下载lamb库 生成需要的lib库,详情 ...
- kubernetes 核心对象
Pods Pod是Kubernetes的基本操作单元,也是应用运行的载体.整个Kubernetes系统都是围绕着Pod展开的,比如如何部署运行Pod.如何保证Pod的数量.如何访问Pod等.另外,Po ...
- C++字符串操作库函数
#include <bits/stdc++.h> using namespace std; int main() { ]="; ]="abcdefg"; ]= ...
- NLP学习常用的网页链接
[2016.7.5] 这是以前学习的时候整理的,放到博客里面,以后再有的话会更新~ 1.一个国外的学者维护的博客,介绍NLP [链接](http://nlpers.blogspot.jp/) 2.北京 ...