Linux文件系统与操作
函数的解释
1、open函数
open函数用来干什么
open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。
#include <fcntl.h>
int open(const char *pathname, int oflag,...);
1、pathname:
在open函数中第一个参数pathname是指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。
2、flags:
flags参数表示打开文件所采用的操作,我们需要注意的是:必须指定以下三个常量的一种,且只允许指定一个
O_RDONLY:只读模式
O_WRONLY:只写模式
O_RDWR:可读可写
2、read函数
read
函数从打开的设备或文件中读取数据。
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0
3、write函数
write
#include <unistd.h>
ssize_t write(int fd, void *buf, size_t count);
write函数参数说明: 同read函数
返回值说明: 返回写入的字节数或者-1并设置errno
特殊说明: 向终端或网络端写数据时,可能会进入阻塞状态
4、lseek函数
lseek
off_t lseek(int fd, off_t offset, int whence);
fd: 从open或create函数返回的文件描述符
offset: 对文件偏移量的设置,参数可正可负
5、close函数
close
#include<unistd.h>
int close(int sockfd); //返回成功为0,出错为-1.
close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终止序列。
在多进程并发服务器中,父子进程共享着套接字,套接字描述符引用计数记录着共享着的进程个数,当父进程或某一子进程close掉套接字时,描述符引用计数会相应的减一,当引用计数仍大于零时,这个close调用就不会引发TCP的四路握手断连过程。
示例代码的运行和解释
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(){
int tempFd = 0;
char tempFileName[20] = "errorr0.txt";
//打开一个已存在的errorr0.txt文件
tempFd = open(tempFileName, O_RDWR|O_EXCL|O_TRUNC, S_IRWXG);//文件所属组,可读、写、执行
if(tempFd == -1){//判断创建是否成功
perror("file open error.\n");
exit(-1);
}//of if
//把数据写入到打开的文件中
int tempLen = 0;
char tempBuf[100] = {0};
scanf("%s", tempBuf);
tempLen = strlen(tempBuf);
write(tempFd, tempBuf, tempLen);
close(tempFd);
//读一遍文件的内容
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_CUR)!= tempFileSize){
read(tempFd, tempBuf, 1024);
printf("%s\n", tempBuf);
}//of while
close(tempFd);
return 0;
}//of main
本代码第一步是打开文件,第二步是写入键盘的数据,第三步是读取文件内容。
在这里插入图片描述
总结
通过今天的作业,浅显的体会了linux环境下c语言的强大之处,熟悉了Linux环境下的程序编写流程,复习了更多c语言文件操作的相关函数。