系统级程序设计第一课

news/2024/11/17 20:21:24/

第一课主要讲利用ubuntu 完成一些之前学过的文件操作,结合c语言来实现

利用的函数有

1 open函数

主要是打开文件;

int open(const char *pathname, int flags[, mode_t mode);

2 read函数

作用是读取已获得文件数据,需要函数unistd.h 形式如下

ssize_t read(int fd,void * buf,size_t count);

fd为从open或create函数返回的文件描述符,简单来说fd就是open一个文件后赋的值。
buf缓冲区,就是把文件中的内容按指定大小存在buf中后续进行输出
count最大读取的长度,即指定要读去数据的长度或者大小

我单

3.write函数

作用与read相似,都在一个函数库里面

ssize_t write(int fd, void *buf, size_t count);

4.lseek函数

都在一个库里

ssize_t write(int fd, off_t offset, int whence);

参数如下

fd: 从open或create函数返回的文件描述符
offset: 对文件偏移量的设置,参数可正可负
whence: 控制设置当前文件偏移量的方法
– whence = SEEK_SET: 文件偏移量被设置为offset
– whence = SEEK_CUR: 文件偏移量被设置为当前偏移量+offset
– whence = SEEK_END: 文件偏移量被设置为文件长度+offset

5.close 函数

int close(int fd);

成功返回1,反之-1

2.案例

 使用open函数打开或创建一个文件,将文件清空,使用write函数在文件中写入数据,并使用read函数将数据读取并打印。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(){
    int tempFd = 0;
    char tempFileName[20] = "test.txt";
    //Step 1. open the file.
    tempFd = open(tempFileName, O_RDWR|O_EXCL|O_TRUNC, S_IRWXG);
    if(tempFd == -1){
        perror("file open error.\n");
        exit(-1);
    }//of if
    //Step 2. write the data.
    int tempLen = 0;
    char tempBuf[100] = {0};
    scanf("%s", tempBuf);
    tempLen = strlen(tempBuf);
    write(tempFd, tempBuf, tempLen);
    close(tempFd);
    //Step 3. read the file
    tempFd = open(tempFileName, O_RDONLY);
    if(tempFd == -1){
        perror("file open error.\n");
        exit(-1);
    }//of if
    off_t tempFileSize = 0;
    tempFileSize = lseek(tempFd, 0, SEEK_END);
    lseek(tempFd, 0, SEEK_SET);
    while(lseek(tempFd, 0, SEEK_CUT)!= tempFileSize){
        read(tempFd, tempBuf, 1024);
        printf("%s\n", tempBuf);
    }//of while
    close(tempFd);
    return 0;
}//of main
 

还存在问题

待解决

总结:本次课最大的收获就是规范代码格式和变量命名,以前写都没怎么注意这些,定义变量也是a,b字母之类的,容易弄混不好分辨,而且注释以后也得落实到位,另外就是对文件的读写加深了影响,也复习了c,还有一些小错误满满解决。


http://www.ppmy.cn/news/580826.html

相关文章

RocketMQ 常见面试题(四)

RocketMQTemplate 常用方法以及介绍 RocketMQTemplate是SpringBoot整合RocketMQ的核心类&#xff0c;它封装了RocketMQ的Java SDK&#xff0c;提供了一系列方便的方法用于发送消息。常用的方法如下&#xff1a; 同步发送消息&#xff1a;SendResult syncSend(String destinati…

实验九 单周期MIPS CPU设计实验(基于Logisim)

一、实验目的 学生掌握控制器设计的基本原理&#xff0c;能利用硬布线控制器的设计原理在Logisim平台中设计实现MIPS单周期CPU。 二、实验内容 利用运算器实验&#xff0c;存储系统实验中构建的运算器、寄存器文件、存储系统等部件以及Logisim中其它功能部件构建一个32位MIPS …

上海交通大学计算机系非全日制,关于上海交通大学非全日制研究生中最便宜的专业...

大家选择在职研究生的方式参加学习的时候都知道不同的方式报考不同学费缴纳也是不同的&#xff0c;非全日制研究生的方式在我们参加报考的时候需要以专业硕士的方式参加报考&#xff0c;需要考生缴纳的费用也是根据不同学校和专业选择不同的&#xff0c;那么关于上海交通大学非…

爱奇艺会员哪里买便宜,什么时候最便宜

很多同学不知道爱奇艺会员哪里买便宜&#xff0c;什么时候最便宜。喜欢追剧看影视的朋友都会选择开通影视网站的会员&#xff0c;其中爱奇艺是选择比较多的一个&#xff0c;下面就和大家分享爱奇艺会员哪里买便宜&#xff0c;什么时候买最便宜。 1.购买爱奇艺会员不建议直接官方…

购买水果最便宜的方案算法题-C++实现

前言 本文记录4月27日晚7点一场软件开发岗笔试的题目&#xff0c;思路以及代码实现。 一、题目简介 题目&#xff1a; 购买水果最便宜的方案 具体描述&#xff1a; m个水果超市在1~n个小时的不同时间段提供不同价格的打折水果&#xff0c;如果某餐厅在每个小时都要采购一种水…

在linux/Ubuntu下调试最便宜的双目摄像头(含Linux版本上位机)CAM5031/CHUSEI 3D WEBCAM 解决只能开单目的问题

在淘宝上买了一个非常便宜的双目摄像头 价格好像只有20来着&#xff0c;测试和学习的首选啊 为了配合ubuntu上的ros使用需要把代码放在ubuntu上运行&#xff0c;卖家也提供了关于linux调试摄像头的资料。 但是摄像头默认的模式是单目&#xff0c;要切换为双目只能使用卖家提供的…

LeetCode K站中转内最便宜的航班(回溯法、动态规划)

有 n 个城市通过 m 个航班连接。每个航班都从城市 u 开始&#xff0c;以价格 w 抵达 v。 现在给定所有的城市和航班&#xff0c;以及出发城市 src 和目的地 dst&#xff0c;你的任务是找到从 src 到 dst 最多经过 k 站中转的最便宜的价格。 如果没有这样的路线&#xff0c;则输…

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言&#xff0c;什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块&#xff0c;STM32F030F4P6&#xff0c;这一个芯片没有USB&#xff0c;但是其他都有&#xff0c;引脚少&#xff0c;价格低廉&#xff0c;如果找不到原厂&#xff0c;可以买替代的国产芯片&#…