使用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中的逻辑操作符
python中主要有三个逻辑操作符,分别是:and.or.not. and:且,所有人为真才为真. or:或,一个为正就是真. not:非,取反. >>> print(3>2 ...
- iframe与父窗口之间数据互相获取
Js/Jquery获取iframe中的元素 博客分类: jquery javascript jquery 在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或 ...
- formatblock 块及
有标签,执行标签替换,只是替换标签,属性不改变. 在无标签外部添加标签
- val() attr('value')
val() 只能更改输入框内的值,能更改value属性, 在浏览器中体现不出value被改变 attr('value') 都可以 谷歌浏览器 val,attr都能获取输入框最新的value值
- LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...
- springboot-controller的使用
获取url中的数据: @RestController public class HelloController { @RequestMapping(value="/say/{id}" ...
- nodejs爬虫selenium
6.元素操作 查找元素 使用操作如何找到页面元素Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. By ID假 ...
- 生信概念之global alignment VS local alignment
- vm+ubuntu联网
在vm下刚装了ubuntu,就是上不了网,确认以下配置后方可以 1.我的电脑开机自动把VM的相关服务都关闭了,需要手动打开 在控制面板中搜索服务,手动启动vm服务 2.在适配器里启用vm网卡 3.使用 ...
- 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】
本文转载自:https://blog.csdn.net/fenglifeng1987/article/details/8302921 超级块是来描述整个文件系统信息的,可以说是一个全局的数据结构,可以 ...