Linux c编程 文件操作作业

a.txt文件内容如下:

32

45

65

32

67

454

89

54

24

75

3

67

890

32

1

1、编写一个程序读取a.txt文件,将文件内容数字从小到大排序,并将排序结果写入b.txt

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
void sort(int *a, int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
    {
        for (i = 0; i < n - 1 - j; i++)
        {
            if (a[i] > a[i + 1]) //数组元素大小按升序排列
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
}
int main()
{
    //读取a.txt
    FILE *fpa = NULL;
    fpa = fopen("a.txt", "r");
    if (fpa == NULL)
    {
        printf("fpa open error:%s", strerror(errno));
        return -1;
    }
    int buf[100];
    memset(buf, 0, sizeof(buf));
    char val[100];
    int iLen = 0;
    while (1)
    {
        memset(val, 0, sizeof(val));
        if (fgets(val, sizeof(val), fpa) == NULL)
        {
            break;
        }
        buf[iLen] = atoi(val);
        //printf("buf[%d]=%d\n", iLen, buf[iLen]);
        iLen++;
    }
    fclose(fpa);
    //排序
    sort(buf, iLen);
    //写入b.txt
    FILE *fpb = NULL;
    fpb = fopen("b.txt", "w");
    if (fpb == NULL)
    {
        printf("fpb open error:%s", strerror(errno));
        return -1;
    }
    int loop = 0;
    for (loop = 0; loop < iLen; loop++)
    {
        memset(val, 0, sizeof(val));
        sprintf(val, "%d\n", buf[loop]);
        fputs(val, fpb);
    }
    fclose(fpb);
    return 0;
}

2、通过读取/proc下的相关文件,得到系统CPU信息,内存信息。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* 字符串解析*/
/*打开的文件,文件中要查找的字符串,返回的数据地址*/
//char *start;
char *parse_string(char *file, char *string)
{
    static char resultstr[100];
    memset(resultstr, 0, sizeof(resultstr));
    int fd;
    char pbuf[1024*10];
    int nread;
    char *ptmp;
    char *start;
    char *end;
    if (!file || !string)
    {
        return NULL;
    }
    /* 打开文件*/
    fd = open(file, O_RDONLY);
    if (fd < 0)
    {
        printf("open %s file error!\n", file);
        return NULL;
    }
    /*将文件读入缓冲区中*/
    nread = read(fd, pbuf, sizeof(pbuf));//将文件中的内容,存放到pbuf中
    if (nread < 0)
    {
        printf("read %s file error!", file);
        return NULL;
    }
    /* 查找文件中的字符串*/
    ptmp = strstr(pbuf, string);
    ptmp += strlen(string);//跳过查找到的字符串位置
    while((*ptmp == ' ') || (*ptmp == ':') || (*ptmp == '\t'))
        ptmp++;
    start = ptmp;
    end = strchr(ptmp, ' ');//查找到所需的数据
    *end = '\0';
    memcpy(resultstr, start, end-start);
    return resultstr;
}
int main()
{
    printf("%s\n", parse_string("/proc/meminfo", "MemFree"));
    return 0;
}

c.txt文件内容如下

index1 = 45

index2 = 36

index3 = 231

index4 = 43

index5 = 100

index6 = 123

index7 = 51

3、通过读取读取c.txt文件内容中等号右值,并将右值最大值,最小值和平均值打印到屏幕。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
char *TrimStrR(char *SrcStr) //去掉字符串右面的空格
{
    if (SrcStr == NULL)
        return NULL;
    int iLen = strlen(SrcStr);
    int i;
    for (i = (iLen - 1); i >= 0; i--)
    {
        if (SrcStr[i] == ' ')
            SrcStr[i] = 0;
        else
            break;
    }
    return SrcStr;
}
char *TrimStrL(char *SrcStr) //去掉字符串左面的空格
{
    if (SrcStr == NULL)
        return NULL;
    if (SrcStr[0] != ' ')
        return SrcStr;
    int iLen = strlen(SrcStr);
    if (iLen == 0)
        return SrcStr;
    char *sTmp = (char *) malloc(iLen + 1);
    memset(sTmp, 0, iLen + 1);
    memcpy(sTmp, SrcStr, iLen);
    int i;
    for (i = 0; i < iLen; i++)
    {
        if (SrcStr[i] != ' ')
        {
            strcpy(sTmp, SrcStr + i);
            break;
        }
    }
    strcpy(SrcStr, sTmp);
    free(sTmp);
    return SrcStr;
}
void ParseValueStr(char *DestStr, char *SrcStr) //解析带等号的字符串并去掉字符传尾部空格
{
    int iLen = strlen(SrcStr);
    if (iLen == 0)
        return;
    if ((SrcStr[iLen - 1] == '\n') || (SrcStr[iLen - 1] == '\r'))//为兼容windows格式文本文件,所以解析了\r字符
        SrcStr[iLen - 1] = '\0';
    if (iLen > 1)
    {
        if ((SrcStr[iLen - 2] == '\n') || (SrcStr[iLen - 2] == '\r'))//为兼容windows格式文本文件,所以解析了\r字符
            SrcStr[iLen - 2] = '\0';
    }
    TrimStrR(SrcStr); //去掉尾部空格
    int i;
    for (i = 0; i < iLen; i++)
    {
        if ((*SrcStr) == '=')
        {
            strcpy(DestStr, ++SrcStr);
            break;
        }
        ++SrcStr;
    }
    TrimStrL(DestStr); //去掉首部空格
}
int max(const int *buf, const int bufsize) //计算数组buf中的最大值,参数bufsize为数组buf的元素数量
{
    int tmp = buf[0];
    int i = 0;
    for (; i < bufsize; i++)
    {
        if (tmp <= buf[i])
            tmp = buf[i];
    }
    return tmp;
}
int min(const int *buf, const int bufsize) //计算数组buf中的最小值,参数bufsize为数组buf的元素数量
{
    int tmp = buf[0];
    int i = 0;
    for (; i < bufsize; i++)
    {
        if (tmp >= buf[i])
            tmp = buf[i];
    }
    return tmp;
}
float avg(const int *buf, const int bufsize) //计算数组buf中的平均值,参数bufsize为数组buf的元素数量
{
    float sum = 0;
    int i = 0;
    for (; i < bufsize; i++)
    {
        sum += buf[i];
    }
    return sum / bufsize;
}
int main(int arg, char *args[])
{
    const char *filename = "c.txt";
    FILE *f = fopen(filename, "r");
    if (f == NULL) //文件c.txt打开错误
    {
        printf("open %s failed %s\n", filename, strerror(errno));
        return -1;
    }
    char sValue[100];
    char buf[100];
    int iValue[1024];
    memset(iValue, 0, sizeof(iValue));
    int i = 0;
    while (!(feof(f)))//循环遍历文件中每一行
    {
        memset(sValue, 0, sizeof(sValue));
        memset(buf, 0, sizeof(buf));
        fgets(sValue, sizeof(sValue), f); //从c.txt文件中读取一行
        ParseValueStr(buf, sValue); //解析带等号的字符串并去掉字符传尾部空格
        iValue[i] = atoi(buf);
        i++; //累加器,记载c.txt文件中总行数
    }
    fclose(f);
    printf("最大值为%d\n", max(iValue, i));
    printf("最小值为%d\n", min(iValue, i));
    printf("平均值为%f\n", avg(iValue, i));
    return 0;
}
时间: 2024-08-24 21:00:10

Linux c编程 文件操作作业的相关文章

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神的无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性. 系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个操作系统差异很大,系统调用函数的可移植性就不高.例如windows采用的系统调用的应用程序不能直接在Linux下编译运行. 之所以使用系统调用是因为系统资源

linux学习(2)文件操作

pwd 显示当前目录 touch 创建空白文件或者更新已有文件的时间 .开头的文件为隐藏文件 列出目录内容 ls -a 显示所有文件 包括隐藏文件 ls -r 显示详细信息 ls -R 显示子目录的结构 ls -ld显示目录和链接的信息 file查看文件的类型 cd 切换目录 复制 cp 源文件 目标文件(目录) 复制文件夹 cp -r 源文件夹 目标文件夹 显示复制的详细信息 cp -v 移动 mv 文件 目标目录 移动并且修改文件名 mv 文件 目标目录/文件名 重命名 mv 文件 文件名

unix环境编程 文件操作

1.  文件的打开读写 关闭 int open(const char *pathname,int flag,-)   打开一个文件 成功则返回文件描述符,若出现则返回-1 flag可以取下面的常量 O_RDONLY  只读打开 O_WRONLY  只写打开 O_RDWR    读写打开 其它的常量 O_APPEND,O_CREAT,O_EXCL,O_TRUNC,O_NOCTTY,O_NONBLOCK是可选的. int create(const char *pathname,mode_t mode

3)Linux程序设计入门--文件操作

3)Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 1.文件的创建和读写 我假设你已经知道了标准级的文件操作的各个函数(fopen,fread,fwrite等等).当然 如果你不清楚的话也不要着急.我们讨论的系统级的文件操作实际上是为标准级文件操作 服务的. 当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数open.使用完 成以后我们调用另外一个

linux下对文件操作报错----------Unable to *** ***: Read-only file system

在linux中对文件操作时报错:Unable to chmod ***: Read-only file system 用如下指令能解决该问题: 输入su root 进入超级用户 输入 mount -o remount rw / 然后可输入 mount 查看

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015 01:23:58 AM PST **********************************

linux编程---文件操作

文件操作的系统函数: open函数,close函数,read函数,write函数,getcwd函数,access函数,stat函数,fstat函数,getcwd函数 函数原型: 1:open函数 功能:打开现有的文件,或者创建新文件并打开:,成功返回值是文件标识号,失败为-1 参数:parhname是文件路径,flag标识可取如下值 mode表示文件访问权限 2:close函数 功能:关闭文件操作,返回值表示是否成功 参数:文件标识号 3:read函数 功能:读取文件内容,返回值表示实际读取内容

LINUX/UNIX的文件操作函数

本文用于记录在LINUX编程中,常用的文件操作函数,包括系统调用和库函数,以备查阅. 针对输入输出操作,直接使用底层系统调用的一个问题是它们的效率十分低,原因在于: 1.使用系统调用会影响系统的性能,与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码. 2.硬件会限制对底层系统调用一次所能读写的数据块大小.比如,磁带机通常一次能写的数据块长度是10K,所以若你试图写的数据量不是10K的整数倍,磁带机还是以10K为单位卷绕

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据