/*
编写一个程序读取a.txt文件,将文件内容数字从小到大排序,并将排序结果写入b.txt。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h> //插入排序
void InertionSort(int * arr,int len)
{
if(arr==NULL)
{
printf("传入参数不可以为空!\n");
return;
}
int i=,j=,k=,temp=;
for(i=;i<len;i++)
{
k=i;
temp=arr[k];
for(j=i-;j>=&&temp<arr[j];j--)
{
arr[j+]=arr[j];
k=j;
}
//k的作用是因为当temp>=arr[j]时,将不会进入循环,此时j是有序数组的最后一个元素
//arr[j]=temp;会将最后一个有序元素覆盖了
//arr[j]=temp; 错误
arr[k]=temp;
}
} int main(int arg, char * args[])
{
if(arg<)
{
printf("本程序需要两个参数!\n");
return ;
}
//define file stream
FILE *pfr=NULL;
//open the file in read mode
pfr=fopen(args[],"r");
//judge
if(pfr==NULL)
{
printf("read the file failed ! error msg:%s\n",strerror(errno));
return ;
}
//create arr
int index=;
//这里index是作为数组长度使用的,index的初始值是0,所以循环之后index会多1,正好此时index就是数组的长度
int arr[]={};
char buf[]={};
while(fscanf(pfr,"%s",buf)!=EOF)
{
arr[index++]=atoi(buf);
memset(buf,,sizeof(buf));
}
//close the file stream
if(pfr)
{
fclose(pfr);
pfr=NULL;
}
InertionSort(arr,index);
//define new file stream
FILE * pfw=NULL;
//open new file in append mode
pfw=fopen(args[],"a");
if(pfw==NULL)
{
printf("write the file failed ! error msg:%s\n",strerror(errno));
return ;
}
//write the file
int num=;
while(num<index)
{
memset(buf,,sizeof(buf));
sprintf(buf,"%d\n",arr[num++]);
fputs(buf,pfw);
}
//close the file stream
if(pfw)
{
fclose(pfw);
pfw=NULL;
}
return ;
}

Linux Linux程序练习二的更多相关文章

  1. linux应用程序地址布局,王明学learn

    linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段.数据段.BSS段(Block Started by Symbol,又名:未初始化数据段).堆(heap)和栈(s ...

  2. linux应用程序开发-文件编程-系统调用方式

    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...

  3. Linux内核分析(二)----内核模块简介|简单内核模块实现

    原文:Linux内核分析(二)----内核模块简介|简单内核模块实现 Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某 ...

  4. UNIX/Linux C 程序员需要掌握的七种武器

    我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...

  5. Linux内存管理(二)

    Linux内存管理之二:Linux在X86上的虚拟内存管理 本文档来自网络,并稍有改动. 前言 Linux支持很多硬件运行平台,常用的有:Intel X86,Alpha,Sparc等.对于不能够通用的 ...

  6. 编写Linux C++程序如何影响VIRT(虚存)和RES(实存/常驻内存)

    转载目的,主要是为了理解lVIRT虚拟内存.RES常驻内存.共享内存SHR.SWAP和实际程序应用如何对应的. 在Linux命令行中执行top命令,可以查询到所有进程使用的VIRT虚拟内存.RES常驻 ...

  7. Linux学习之CentOS(二)--初识linux的一些常用命令

    Linux学习之CentOS(二)--初识linux的一些常用命令 在VM上安装完了CentOS6.4以后,看着linux系统成功跑起来,心里小激动了一把......但是前方学习的道路还很遥远... ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. Linux及安全实践二

    Linux及安全实践二   基本内核模块 20135238 龚睿 1.  理解模块原理 linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个 ...

  10. Linux Shell 程序调试

    Linux Shell 程序调试 Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”.当然,用户也可以在she ...

随机推荐

  1. [Android Memory] Android性能测试小工具Emmagee

    转载:http://blog.csdn.net/anlegor/article/details/22895993 Emmagee是网易杭州QA团队开发的用于测试指定android应用性能的小工具.该工 ...

  2. cs-Panination

    ylbtech-Unitity: cs-Panination Pager.cs IPagingOption.cs IPagedList.cs PagingOption.cs PagedList.cs ...

  3. Dedecms getip()的漏洞利用

    flyh4t在非安全发布了dedecms getip()的注射漏洞,漏洞本身的成因没什么好说的老掉牙的X-Forwarded-For的问题,我想这个漏洞很多人都找到了,不过这个漏洞的利用有个地方还是可 ...

  4. druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)

    介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...

  5. Pinterest架构:两年内月PV从零到百亿

    Pinterest正经历了指数级曲线般的增长,每隔一个半月就翻番.在这两年里,Pinterest,从 每月PV量0增长到100亿,从两名c创始人和一个工程师成长为四十个工程师,从一台MySQL 服务器 ...

  6. php中一些函数的用法

    addslashes() 定义和用法 addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数 ...

  7. 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)

    弹出的形式对于用户来说,总是不太友好的 可能会出现层级问题(只需要设置一下提示的层级即可) WxValidate内置规则 以下代码拷贝即可使用~ wxml <form bindsubmit='s ...

  8. Appstore 提交Ipad 和Iphone版

  9. Python——在Python中如何使用Linux的epoll

    在Python中如何使用Linux的epoll 目录 序言 阻塞socket编程示例 异步socket的好处以及Linux epoll 带epoll的异步socket编程示例 性能注意事项 源代码 序 ...

  10. 自定义radio/checkbox样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...