linux下的文件缓冲IO

1 dup / dup2
 复制一个现有的文件描述符时,不会赋值文件表。出现多个文件描述符对应同一张文件表的情况
 dup()复制时系统会自动选择一个位置用的文件描述符,通常选择未使用的最小值
 dup2()是程序员指定的新的文件描述符,如果已被使用,则会强行关闭源文件后继续为我所有。
 dup.c
 他们经常用来重定向进程的stdin stdout stderr  
2.fcntl
 #include<fcntl.h>
 int fcntl(int fd, int cmd)
 int fcntl(int fd, int cmd, long arg)
 可以改变已打开文件的性质,提供5种控制文件的功能:
 2.1 复制一个现有的文件描述符 (F_DUPFD)
     复制文件描述符,需要第三个参数作为新的文件描述符值
 和dup2的区别,则找到大于该值且未被使用的最小值代替。
fcntl.c
 2.2 获得或者设置文件描述符标记(F_GETFD F_SETFD)
 2.3 获得或者设置文件状态(F_GETFL F_SETFL)
 2.4 获得后者设置异步I/O所有权(...)
 2.5 获得或者设置记录锁(F_GETLK F_SETLK F_SETLKW)(重点)
    1)对于多进程同时操作一个文件,引入了锁机制。文件锁机制解决的是多进程操作时操作同一个文件产生
   数据冲突的问题。
2)同一进程内部文件锁没有效果。文件锁允许多个进程同时读,不允许同时写。也循序多个进程同时读
   写。因此文件锁分为读锁和写锁。
3)读锁针对读操作,效果允许其它进程继续给该文件加读锁执行读操作,但不允许给该文件加写操作执行
   写操作。
4)写锁针对写操作,效果不允许其它进程继续给该文件加读锁或者写锁进行读或者写操作。
 
文件爱你锁的使用包含一个函数 + 一个数据结构
   函数: fcntl()
   数据结构:
     struct flock
 {
...
short l_type; //指明锁的类型:F_RDLCK  F_WRLCK  F_UNLCK
short l_whence; //可以锁文件的一部分:SEEK_SET SEEK_CUR SEEK_END
off_r l_start; //相对于whence偏移的位置(起始位置)
off_t l_len;//需要被锁的字节数
pid_t l_pid; //上锁的进程
...
 }
fcntl(fd, cmd, arg)
cmd取值:
      F_GETLK:测试是否可以加锁
  F_SETLK:设置锁状态为lock.l_type, 加/解锁
  F_SETLKW:加锁的时候,如果加锁不成功则一直等待,f
            加锁不成功fcntl()函数不会返回

文件锁的特点:
   1)可以加锁整个文件,也可以加锁文件的一部分
   lock1.c:a.txt 10~30 加读锁
lock2.c: a.txt 0~20  加读锁 成功
              20~30 加写锁 失败   
2)上锁的方式有两种:
                   F_SETLK:加锁定失败,立即返回-1
F_SETLKW:wait,加锁不成功不反回
lock3.c
3)文件锁其实并不能锁定读写函数,只能阻止其它进程的加锁行为,导致其它进程加不上锁。
  因此文件锁的正确用法:在调用read之前加读锁,在调用write之间加写锁,读写完之后立刻释放锁。
  如果在加锁之前可以获取一下文件锁的状态预测一下加锁是否成功。F_GETLK
  
  lock4.c:尝试给a.txt 0~20 是否可以加读锁
                       20~50 是否可以加写锁
4)文件锁解决的是多进程操作同一个文件产生的数据冲突的问题,同一个进程间的锁无效
5)进程退出时,属于该文件的所有锁均被释放
6)建议性锁,而非强制性锁
3 stat函数
        获取硬盘上文件的属性信息
        ls -il
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

struct stat
{
dev_t st_dev;
ino_t st_ino;    //inode number
mode_t st_mode;  //
nlink_t st_nlink;
uid_t st_uid;    //
gid_t st_gid;
dev_t st_rdev;   //
off_t st_size;   //the size of the file
blksize_t st_blksize;
blkcnt_t st_blocks;
time_t st_atime;
time_t st_mtime;  //time of last modification
time_t st_ctime;  //time of stus of change
}
4 remove函数
#include <stdio.h>
int remove(const char *pathname)
--------------------------------
标C:remove(filename)
UC:unlink(删除一个文件)      
     int unlink(const char *pathname)
删除一个文件,要删除的文件正在被某个进程打开或使用,其内容直到该文件被关闭后才会正真删除。

unlink1.c
unlink2.c
在实际项目中通常会使用一些临时文件时,当使用者打开了该文件就可以使用unlink()来删除动作。
 
umask

5 其它的一些函数
access 文件是否存在以及相关权限
umask  为进程创建屏蔽字
chmod  改变文件的权限
chown  改变文件的所有者
truncate 文件截断
create 创建文件(几乎没人用,废弃)
以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值