前言
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等注释在一定程度上也增加了代码的可读性,方便以后回头复习和阅读