使用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) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...
随机推荐
- Python基础(19)_异常处理
一.异常处理 错误和异常: 1.错误的种类: 1)语法错误:这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2)逻辑错误: 例如: res1=1/0 .es2=1+'str ...
- LeetCode:数据库技术【175-178】
LeetCode:数据库技术[175-178] LeetCode已经刷完200道题目,但这只是开始,下一段时间,仍然把刷题作为重点,争取再次完成200道,本篇博客将会带大家熟悉一些数据库面试题,从简单 ...
- Matlab 绘图完整入门
Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...
- 【TopCoder】SRM160 DIV1总结
做了两道题之后才发现做的是DIV1,不是DIV2,DIV1的第二道题是DIV1的第三道题,果断决定第3题就不看了=.= 250分题:给定一个时间起点8:00 AM DAY 1,再给出一组时间终点,格式 ...
- BCM 交换机开发
转:http://blog.chinaunix.net/uid-23782786-id-3839602.html 前言: 最近搞这玩样,真是折腾,网上的资料都是片段,而且很少.折腾了4. ...
- 让iOS项目允许使用http协议请求
苹果官方已经默认不让开发者使用不安全的http通信协议了,而是建议开发者使用安全的https协议.若我们还是需要使用http协议可以这样配置XCode: 1.打开info.plist文件 2.点击加号 ...
- windows环境下安装部署并启用zkui的web图形界面
在此之前的工作:不是本机部署的三个服务器最为伪集群的zookeeper环境,并将三个为服务启动起来. 然后才有了下面的工作. 1. 首先,zkui项目地址:https://github.com/Dee ...
- JAVA基础补漏---数组
int[] a = new int[5]; int[] b = new int{1,2,3}; int[] c = {4,5,6}; 以上几种定义都可以. a叫动态初始化. b叫静态初始化. c叫静态 ...
- WebSocket和HTTP的区别与联系
WebSocket是一个计算机通讯协议,在单个TCP连接上提供全双工的通讯模式.WebSocket设计用于Web浏览器和Web服务器之间的通讯,但也可以用于其他的客户端和应用服务器.WebSocket ...
- 算法总结之 最大值减去最小值或等于num的子数组数量
给定数组arr和整数num,共返回有多少个子数组满足 <= num 数组长度N 时间复杂度O(N) package TT; import java.util.LinkedList; pu ...