自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 硬连接符号链接

unlink函数的另一个用途就是用来创建临时文件,如果在程序中使用open创建了一个文件后,然后立即使用 unlink 函数删除文件,由于此时进程正在打开该文件,所以系统并不会释放该文件的 inode 节点,而只是删除其目录项。符号链接文件很小不占磁盘空间,符号链接文件可以划分区建立,因为是不同的INODE号,也可以给目录建立。符号链接文件的文件属性是符号链接文件。源文件和符号链接文件时两个独立的文件,有不同的文件INODE,以及各自的属性。硬连接是目录项的同义词,生成的是普通文件。

2024-04-09 09:30:00 332

原创 文件系统:FAT UFS

单向链表最大的弊端就是单向,当你进入一块数据块,然后去下一块数据块,在你使用的数据,突然间需要一个数据块,发现它在上一个数据块,不能直接回去,因为是单链表。缺陷:UFS不擅长管理小文件,INODE满了,但是数据块大面积空白,查找慢一些,EST2的前身就是UFS文件。而a还是原来的样子,最右边的1还是1,最右边1右边的0还是0,所以两个数进行与会把最右边的那个1消掉。此时要使用INODE位图,INODE位图0 1表示有没有用,在程序员眼里,位图是加速机制。INODE节点很多没用,数据块满了,全是大文件。

2024-04-08 09:30:00 285

原创 如何证明内存吃紧,磁盘碎片整理

当你换出率直线上升,换入率浮动不大,不证明内存吃紧,只能证明你现在使用的数据在载入,有一些你不常用的数据在载出。当你换出率和换入率都在上升,这种情况应用程序已经不能保证所用到的数据都拿进来了,不停的把用完的拿出,要用的拿入。你摸到的是物理内存地址的映射,用户层级摸映射,映射的是物理地址。当你换出率浮动不大,换入率直线上线上升,你现在应用程序用的数据都在别处,正在被拿进来。你能摸到物理内存地址,但是你不能知道这个物理内存地址是哪一个进程或应用程序使用。你得到一个地址,这样是能改变那个地址里面的值。

2024-04-07 09:15:00 150

原创 目录和文件

为什么要加单位呢,因为没有单位的值是没有意义的,当什么单位也没有,系统会默认给一个单位,当前默认为32位的有符号整数。执行过程:读一块,写一块,但是在写之间要进行检查,检查是不是空字符,如果是,那就记录不下,不写,再读一块写一块,写之前检查一下。得到文件权限的方法有两种,一种是通过宏来判断,也就是上面这种,虽然S_ISREG看着是一个函数但是它是通过带参宏来定义的。在linux中并不是文件有多大,在磁盘里面就有这么大的空间。文件的范文权限是一个16位的位图,用于表示文件类型,文件的访问权限,及特殊权限位。

2024-04-06 19:52:26 854 1

原创 原子操作 同步

但是这个函数是由bug的,比如你再关闭1后在你还没有实现dup时,打开了一个文件,那么就会占用1号文件描述符。//printf输出的内容直接输入文件描述符fd指向的文件,即test.txt。* 3.我们在写程序的不能当作自己一个人在写,应该当作模块在写,进函数时的状态是什么样,那么出函数的状态就应该是什么样。5.获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW).* 这个函数进来时候的状态是1为stdout但是出去的时候这个函数的状态为1为其他文件的描述符。可以将这两部合成一部。

2024-04-06 14:35:36 1680 1

转载 IO效率问题与文件共享

fprintf(stderr,"Usage :%s <destfile> <大于零的数>",argv[0]);printf("得到某一行出错2");printf("放入字符出错");printf("得到某一行出错1");printf("设置文件指针位置错误1");printf("文件位置指针设置错误");printf("文件行数为:%d \n",count);上面是我测试的8M的时候出现段错误。printf("文件位置设置错误");printf("请输入正整数");

2024-04-05 15:19:25 19 1

转载 系统调用IO与文件IO的区别及过程

文件io没有缓冲区 进行文件io与标准io进行混合输出的时候系统io在做输出的时候不会先输出缓冲区的东西然后在输出自己想输出的东西,同样也不会先输出系统io输出的东西在输出缓冲区的东西。(标准io缓冲区满的时候会自主调用系统io函数将缓冲区里面的东西输出(也就是你使用系统io输出一些东西,只不过这些东西变成了缓冲区里面的东西),因为标准io函数是用系统io函数封装,最后也会调用系统io函数。将已经打开的系统IO文件描述符,通过mode来制定对它的操作方式,用fdopen封装,将系统IO转变成标准IO。

2024-04-04 10:48:13 510 1

原创 open() close() read() write() lseek()

flags文件打开常用的选项是 O_RDONLY(只读),O_WRONLY(只写),O_RDWR(读写),这三个是必须有一个的加上一些文件创建的选项和文件状态选项。因为err有真错和假错,假错是因为你被某些阻塞或者非阻塞一些会遇到的情况打断了,才会导致写入0个,所以0不一定是出错,要看err的原因判断是不是真出错。这个函数有三参和两参的区别,在java里面叫做重构,但是c语言里面没有重构这个概念,所以c语言里面这个函数是通过变参函数来实现的。返回值:成功从当前位置指针到你设置的文件位置指针所经历的字节数。

2024-04-03 15:52:19 232 1

原创 系统调用(1)什么是文件描述符

2.你将四中的地址复制到6,这时4和6都会指向同一个结构体,当4关闭时,4 6指向的同一个结构体会被关闭吗?记录结构体引用的次数,当为0时,才会销毁这个结构体。文件描述符是数组下标,之前我们曾经做过一个实验,不停的fopen打开文件,最多只能打开1021个,再加上三个(标准输出,标准输入,标准出错);这个1024就是数组大小,数组里面存放着地址,指向结构体,结构体里面是文件的一些信息。当123456数组下标都被使用后,然后关闭4,再打开的话那文件描述符就是4。文件描述符是在文件IO中贯穿始终的类型。

2024-04-03 08:45:00 520 1

原创 getline

因为并发,AB两个进程,A进程创建了一个名字还没有执行fopen,B进程开始执行创建名字函数执行完毕,也是还没执行fopen,此时轮到A进程执行,A进程开始创建文件并打开,B进程然后也开始打开文件,打开的是同一个文件,这是B进程会对A进程所写内容进行覆盖,由于是新文件所以不必要求新文件必须存在。一个文件如果没有一个硬连接指向它而且文件的打开计数已经为0,那么这块数据就被释放了,及close之后就会释放内存里,但是当你没有close,那么就在这个程序正常终止的时候释放这个进程所占的所有资源。

2024-04-02 09:15:00 279 1

原创 fseek();ftell();rewind();

你先touch一个文件,本身文件的大小为0,产生文件后调用fseek函数,将该文件从头部开始延伸,直接使文件文件成为文件本身大小,也就是一个空文件产生,直接将空文件用fseek拉到文件本身大小的空间,文件里面全是ASCII码为0的\0。一般的下载工具这样实现下载: 将所要下载的文件,切成片,用多进程或多线程进行下载(一般是多线程),多线程用来进行每一块的下载,每个线程锁定自己的一块文件进行下载,其他线程不能对这一块文件读写。基本上你下载文件产生那个不可识别图标的文件,一上来就时文件本身大小。

2024-04-01 21:34:57 473

原创 fread(),fwrite() scanf() printf()

只有操作很工整的数据是才会使用fread和write,比如学生的信息,因为学生的信息结构体都是一样大小的,但是如果其中某一个错了,导致读取的地方不是下一个学生信息的开始,那么以后读取的内容全都错了。1>1次->10字节 2->0->?atoi与sprintf做的事情是相反的,atoi是从混合串中取数,而sprintf是将你想的数加到混合串里面。

2024-03-20 10:02:54 850 1

原创 fgetc() fputc();fgets(),fputs();

char * gets(char*s),当你输入一大串文本的时候,并没有立即放在指针指向的位置,当你敲入回车的时候才会放在指针所指向的位置,当前缓冲区的大小可能超过你指针的大小。当一个文件中有只 abcdef 一次读5个 第一次读会读到abcd 第二个会读到ef'\n' '\0'diff 文件路径 文件路径,命令行没有输出表示两个文件相等。答案是读两次 第一次是读abcd 第二次是读‘\n’ '\0'命令行输入 ./xxx 文件路径 文件路径。程序一 复制一个文件内容到另外一个文件。

2024-03-17 11:39:31 1700

原创 标准IO操作 fopen()fclose()笔记

fopen在打开不存在的文件是会创建文件,但是创建文件需要知道文件的权限,文件的权限是通过一个公式得到的,0666&umask 其中0666是八进制(0开头表示八进制),终端输入umask可以看到。在上面这种情况下,相当于创建了一个临时变量tmp,当这个函数调用完成后,这个临时变量就失效,这个指针也就失效了,所以不能使用这个指针操作它指向的结构体。这种情况下,你打开两个文件,前一次打开的就不能在对它指向的文件进行操作会报错,但是后一次打开还是能对第二次指向的文件进行操作。.......(结构体成员赋值)

2024-03-17 10:23:47 1435 2

原创 Vs 用C使用Socket实现Tcp通信

1.1何为socketsocket历史Socket套接字由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了Socket套接字。Linux系统采用了Socket套接字,因此,Socket接口就被广泛使用,到现在已经成为事实上的标准。

2023-11-16 17:27:42 843 1

原创 *a&a const详解(适用初学者)

区分常量指针和指针常量的关键就在于星号的位置,我们以星号为分界线,如果const在星号的左边,则为常量指针,如果const在星号的右边则为指针常量。全局变量的作用域是整个文件,我们应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,它也会影响到其他引用这个变量的函数,导致除了bug后很难发现,如果一定要用全局变量,我们应该尽量的使用const修饰符进行修饰,这样防止不必要的人为修改,使用的方法与局部变量是相同的。总结以上两点:n是将赋予n的地址,*n是对n地址里面的数是只读的,不能修改。

2023-11-13 23:02:09 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除