欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

集训第一天所学

发布时间:2024/4/13 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 集训第一天所学 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

第一天我们主要学习了文件编程的相关知识
1.不带缓存的(系统调用)-文件访问:
主要学习了open,read,write,lseek函数的运用。
2.带缓存的(库函数)- 文件访问
主要学习了fopen,fread,fwrite,fseek.
3.不带缓存的I/O对是文件描述符操作,带缓存的I/O是针对流的。
标准I/O库就是带缓存的I/O,它由ANSI C标准说明。当然,标准I/O最终都会调用上面的I/O例程。
标准I/O库代替用户处理很多细节,比如缓存分配、以优化长度执行I/O等。
4.对于lseek成功返回返回移动后指针距离文件开头的长度,对于fseek成功返回0.
之后我们讲了测试了不带缓存与带缓存下文件的长度,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
int length;

/*int fd = open(argv[1], O_RDWR); if (-1 == fd) {perror("open");exit(1); }length = lseek(fd, 0, SEEK_END); //文件指针移动到文件末尾,返回移动后指针距离文件开头的长度*/ FILE *fp = fopen(argv[1], "a+"); if (NULL == fp) {perror("fopen");exit(1); } fseek(fp, 0, SEEK_END); //成功返回0 length = ftell(fp); //返回文件指针距离文件开头的长度 printf("%d\n", length);fclose(fp);return 0;

}
5.然后我们还讲了不带缓存下实现一个文件到另外一个文件的拷贝,代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int fd;
char buf[32] = {0};
//int ret;
ssize_t ret;

/*fd = open("hello.c", O_RDWR); //读写方式打开存在的文件 if (-1 == fd) {perror("open");exit(1000); }*///fd = open("hello.txt", O_RDWR | O_CREAT, 00700); //先创建文件,再打开,文件可以存在 fd = open("hello.txt", O_RDWR | O_CREAT | O_EXCL, 00700); //先创建文件,再打开, 文件必须不存在 if (-1 == fd) {perror("open");exit(1); }scanf("%s", buf); ret = write(fd, buf, strlen(buf)); if (-1 == ret) {perror("write");exit(1); }//lseek(fd, 0, SEEK_SET); //相对文件开头移动0个字节 //lseek(fd, strlen(buf) * -1, SEEK_CUR); //相对当前位置,向前移动xxx个字节 lseek(fd, strlen(buf) * -1, SEEK_END); //相对文件末尾,向前移动xxx个字节memset(buf, 0, sizeof(buf)); ret = read(fd, buf, sizeof(buf)); if (-1 == ret) {perror("read");exit(1); } printf("read from txt : %s\n", buf);close(fd);return 0;

}
6.void perror(const char *s); perror (“open_port”);
包含头文件(不可以掉了这个头文件):
#include <stdio.h>//包含perror的头文件
函数说明
  perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。
7. man后参数(数字或者字母)作用介绍
8.man后面参数(数字或者字母)作用
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数,如printf,fread
4是特殊文件,也就是/dev下的各种设备文件
5是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
n新文档,可能要移到更适合的领域。
o老文档,可能会在一段期限内保留。
l本地文档,与本特定系统有关的。

之后我发现自己对于函数用法还掌握的不熟练,应勤加记忆。

收获:
(1)我发现缓存区到磁盘实现的都是write操作,
反之磁盘到缓冲区则是read操作,且缓冲区属于内存,两个操作都是在内存和磁盘间操作。
(2)read函数读完数据后值为0,但也可以是所读完的数据的长度。
自我评价:多敲代码,上课多做笔记。

总结

以上是生活随笔为你收集整理的集训第一天所学的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。