使用I/O 系统调用--copy.c
作为Linux/Unix 系统编程入门,小生按照自己可以理解的方式,改写了源copy.c
源代码来自:Linux/UNIX 系统编程手册 上册 P57
#include <stdio.h>//标准输入输入头文件
#include <fcntl.h>//文件信息控制头文件 -详细信息请自行google-
#define BUF_SIZE 1024
int main(int argc,char *argv[])
{
int inputFd,outputFd,openFlags;
mode_t filePerms;
ssize_t numRead;
char buf[BUF_SIZE]; if(argc !=3 || strcmp(argv[1],"--help") ==0 )//进行参数判断
printf("%s old-file new-file\n",argv[0]); inputFd=open(argv[1],O_RDONLY);//以只读的方式打开原文件 openFlags = O_CREAT | O_WRONLY | O_TRUNC;//位掩码,文件的访问模式--将三个域定义的常量进行‘或’运算结果赋值给openFlags,作为打开文件的方式,其值可自行验证
filePerms=S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP|S_IROTH|S_IWOTH;//设置新文件的权限,可以只用用常量串表示 例如:421 linux 文件权限可自行google-----如果openFlags未指定O_CREAT标志,本行可以不写,即open()第三个参数不写。
outputFd=open(argv[2],openFlags,filePerms);//打开用上面设置的打开方式和文件权限打开一个新文件 while((numRead=read(inputFd,buf,BUF_SIZE))>0)//从源文件中读取BUF_SIZE大小的数据放到buf缓冲区
if(write(outputFd,buf,numRead)!=numRead)//从缓冲区取出数据放到新文件中,如果不等于从源文件读出的大小,则给出错误信息
printf("couldn't write whole buffer");
return 0;
}
使用I/O 系统调用--copy.c的更多相关文章
- Block深入浅出
研究工具 clang 为了研究编译器的实现原理,我们需要使用 clang 命令.clang 命令可以将 Objetive-C 的源码改写成 C / C++ 语言的,借此可以研究 block 中各个特性 ...
- HEC-ResSim原文档
HEC-ResSim Reservoir System Simulation User's Manual Version 3.1 May 201 ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- linux标准io的copy
---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) ...
- Linux系统调用
在前面,我们接触到了很多函数能够实现系统相关的功能,比如解析命令行参数.控制进程以及映射内存等等.实际上,这些函数能够分为两大类: 库函数--这些函数就像普通函数一样,参数放置在寄存器或者栈里,运行时 ...
- 通过zero copy来实现高效的数据传输
这段时间在学习一些系统底层的知识,真后悔大学没有好好学习操作系统,导致好多文章看不懂.说到这不得不吐槽一下,像介绍系统层次的一些书籍好多都是中文翻译版,而大部分的中文翻译版大都语句晦涩,难懂,而且极易 ...
- Zero Copy 简介
转自:http://blog.csdn.net/zzz_781111/article/details/7534649 许多web应用都会向用户提供大量的静态内容,这意味着有很多data从硬盘读出之后, ...
- Zero Copy
原文出处: http://www.ibm.com/developerworks/library/j-zerocopy/ 传统的I/O 使用传统的I/O程序读取文件内容, 并写入到另一个文件(或Sock ...
- fork系统调用(转载)
(1) fork系统调用说明 fork系统调用用于从已存在进程中创建一个新进程,新进程称为子进程,而原进程称为父进程.fork调用一次,返回两次,这两个返回分别带回它们各自的返回值,其中在父进程中的返 ...
随机推荐
- Socket Programming in C#--Getting Started
Getting Started You can argue that one can overcome these shortcomings by multithreading meaning tha ...
- Activiti系列:为什么Activiti 5.18 的REST的api总是返回404错误
REST api可以访问了,如下 1.修改db.properties配置文件,让他访问sql server 2.在浏览器中输入如下地址,注意中间有一个service,这点和之前的不一样,在<Ac ...
- 20135316王剑桥 linux第七周课实验笔记
第十章.程序间的交互和通信 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程.输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 输入:从I/O拷贝到主存,输出:从 ...
- [转]MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...
- EF保存平面数据到SqlServer
前言 公司开展一个项目,需要根据客户手机定位获取周围内的精准广告,具体是管理员在地图上绘制多边形的广告范围,落在范围内的客户就看到此广告.下面将我的实现方法简单叙述一下,以供有相同需求的朋友参考. E ...
- 推荐一个 angular 图像加载插件
推荐一个简单的 Angular 图片加载插件:vgSrc,插件根据图片资源的不同加载状态,显示不同图片,亲测兼容IE-8. 使用 推荐使用 bower 加载: bash bower install v ...
- 最新微信小程序(应用号)视频教程,实战教程
1.1课程介绍,定个小目标 http://v.youku.com/v_show/id_XMTc2NzIwNDk1Ng==.html 1.2开发文档简读,了解全貌 ht ...
- android之SQLlite操作
布局文件 创建了四个按键,分别对应增删改查 <?xml version="1.0" encoding="utf-8"?> <LinearLay ...
- jQuery Mobile学习日记
本次主讲人是王思伦啦啦啦~ 框架特性 jQuery Mobile 以“Write Less, Do More”作为目标,为所有的主流移动操作系统平台提供了高度统一的 UI 框架:jQuery 的移动框 ...
- 详解在visual studio中使用git版本系统(图文)
很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...