使用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) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...
随机推荐
- 【转】ModelAndView 学习
http://blog.csdn.net/wavaya/article/details/6185226 ModelAndView 类别就如其名称所示,是代表了Spring Web MVC程式中呈现画面 ...
- Hadoop学习基础之三:MapReduce
现在是讨论这个问题的不错的时机,因为最近媒体上到处充斥着新的革命所谓“云计算”的信息.这种模式需要利用大量的(低端)处理器并行工作来解决计算问题.实际上,这建议利用大量的低端处理器来构建数据中心,而不 ...
- pycharm一直scanning files to index
删除了c盘的垃圾文件之后,pycharm就一直scanning files to index 解决方法: 点击file,然后选择invalidate caches / restart ...,再弹出的 ...
- MySQL数据库(1)_MySQL数据库介绍与安装
一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展 ...
- Linux Shell基础 Bash常见命令 echo命令
概述 shell中常见的命令echo. 输出命令:echo echo命令的输出内容如果没有特殊含义,则将原内容输出到屏幕:如果输出内容有特殊含义,则输出打印其含义. 命令格式如下: [root@loc ...
- Linux基本命令 网络命令
概述 网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ...
- IMX6Q RTC驱动分析
对于在工作中学习驱动的,讲究的是先使用,再理解.好吧,我们来看看板子里是如何注册的? 在板文件里,它的注册函数是这样的: imx6q_add_imx_snvs_rtc() 好吧,让我们追踪下去: 1 ...
- level-8
CSS选择器常见的有几种? !important选择器——它是所有选择器里面权重最高的. *选择器——它是所有选择器里面权重最低的.可以为页面所有的标签添加统一样式,多用于页面整体样式调整,但它会增加 ...
- 【iOS和HTML 5交互】iOS中加载html5调用html方法和修改html5内容
近期项目开发中用到了这方面的技术了,那我们一起来看看. 1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webView ...
- JavaScript中有时候需要获取当前的时间戳
JavaScript中有时候需要获取当前的时间戳信息,下面列举了三种获取当前时间戳的方法,第一种方法只精确到秒,后两种方法精确到毫秒. 第一种方法 var timestamp1 = Date.pars ...