系统级程序设计-第一课


前言

Linux操作系统自诞生至今逐步发展并日渐完善,因其开源、安全、稳定等特性,成为众多企业与政府部门搭建服务器的首选平台。此外,Linux在移动应用与嵌入式开发领域也被广泛采用,因此掌握Linux系统的使用与Linux系统平台下的程序开发方法成为众多计算机从业人员需要掌握的必备技能。
——《Linux编程基础》黑马程序员著


一、文件操作函数

1.open函数

open()函数的功能是打开或创建一个文件,该函数存在于系统函数库fcntl.h中,其函数声明如下:

#include <fcntl.h>
int open(const char *pathname, int flags[, mode_t mode);

2.read函数

read()函数用于从已打开的设备或文件中读取数据,该函数存在于函数库unistd.h中,其函数声明如下:

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

3.write函数

write()函数的用于向已打开的设备或文件中写入数据,该函数存在于函数库unistd.h中,其函数声明如下:

#include <unistd.h>
ssize_t write(int fd, void *buf, size_t count);

4.lseek函数

每个打开的文件都有一个当前文件偏移量,该数值是一个非负整数,表示当前文件的读写位置,Linux系统中可以通过系统调用lseek()对该数值进行修改。lseek()函数位于库unistd.h中,其函数声明如下:

#include <unistd.h>
ssize_t write(int fd, off_t offset, int whence);

5.close函数

打开的文件在操作结束后应主动关闭,Linux系统调用中用于关闭文件的函数为close(),该函数的使用方法很简单,只要在函数中传入文件描述符,便可关闭文件。close()函数位于函数库unistd.h中,其声明如下:

#include <unistd.h>
ssize_t write(int fd, off_t offset, int whence);

二、案例

1.代码

代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int main(){//of main
	int tempFd = 0;
	char tempFileName[20] = "test.txt";
	//open
	tempFd = open(tempFileName, O_RDWR|O_EXCL|O_TRUNC, S_IRWXG);
	if(tempFd == -1){//of if
		perror("file open error.\n");
		exit(-1);
	}
	//write
	int tempLen = 0;
	char tempBuf[100] = {0};
	scanf("%s", tempBuf);
	tempLen = strlen(tempBuf);
	write(tempFd, tempBuf, tempLen);
	close(tempFd);
	//read
	tempFd = open(tempFileName, O_RDONLY);
	if(tempFd == -1){//of if
		perror("file open error.\n");
		exit(-1);
	}
	off_t tempFileSize = 0;
	tempFileSize = lseek(tempFd, 0, SEEK_END);
	lseek(tempFd, 0, SEEK_SET);
	while(lseek(tempFd, 0, SEEK_CUR)!= tempFileSize){//of while
		read(tempFd, tempBuf, 1024);
		printf("%s\n", tempBuf);
	}
	close(tempFd);
	return 0;
}

2.过程

Step1:在CodeBlocks中编写上述代码
在这里插入图片描述

Step2:在终端界面使用gcc命令编译
在这里插入图片描述
Step3:执行编译后的文件
在这里插入图片描述

总结

第一次课内容不是很多,主要是强调了了解底层的重要性,对于老师给出的代码一开始没有理解,照着抄完发现运行不了,后来发现是给出的代码中SEEK_CUR写成了SEEK_CUT,这段代码我总共敲了三次,对文件I/O函数有了一定的认识,老师要求规范的//of main等注释在一定程度上也增加了代码的可读性,方便以后回头复习和阅读

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值