27,UC(06)

/*
 达内学习 UC day06 2013-10-10
*/

回忆过去:
 系统调用 - UNIX操作系统提供的一些列函数皆苦,用于访问内核空间,遵循posix规范
 文件操作:open()\read()\write()\close() 函数的使用

lseek() - 移动文件内指针,设置偏移量
dup()/dup2() - 文件描述符的复制
fcntl() - 文件控制函数,提供很多功能 文件相关函数

lseek() 用法和fseek() 基本一致,第一个参数是文件描述符,第二个参数是偏移量,第三个参数是偏移的参照位置,包括SEEK_SET(头)SEEK_CUR(当前) SEEK_END(文件结尾)

dup()和dup2()都可以复制文件描述符,但是不会复制文件表
dup() 复制描述符时候,新的描述符由系统选定
dup2()复制时,描述符由程序传入,如果改值被占用,关闭后使用传入的值

int fcntl(int fd,int cmd,...)
 通过不同的cmd 执行不同的操作,常见的cmd
 1 F_DUPFD 复制文件描述符 需要第三个参数传入新描述符的值,但返回描述符的值大于等于传入的值的最小值(不像dup2强制关闭)
 2 F_GETF 取文件的权限和状态,取不到创建标记,不需要第三个参数
 3 F_SETFL 设置文件的状态标记,支队O_APPEND 有效
 4 文件锁的操作和使用。

当多个进程同时访问同一个文件时,有可能引发数据访问错误,因此为了保证数据有效,需要用文件锁 控制多个进程对同一个文件读写操作p。
 文件锁:在一个进程操作文件时,锁定其他进程对文件的操作,直到结束对文件的操作。
 目前文件锁都采用读写锁,分为读锁和写锁
读锁:共享锁,允许多个进程对文件的某个区域加读锁
写锁:互斥锁,排他锁,只能有一个进程加锁。
加了读锁的区域,不能再加写锁
结论:如果一个进程对文件的某个区域加了读锁,其它进程可以对该区域加读锁,但不能加写锁,如果一个进程对文件的某个区域加了写锁,其他进程对该区域不能加任何锁

文件锁锁定文件的某部分
fcntl()对文件加锁解锁 int fcntl(int fd, int cmd, ... /* arg */ );
cmd可以是
F_SETLK  加锁/解锁 如果加不上锁,返回-1  F_SETLK (struct flock *)
F_SETLKW 加锁/解锁,如果加不上锁 等待  出错返回-1
F_GETLK  测试某个锁能某加上,但不真正加锁
文件锁用  struct flock 代表
struct flock
{
 short l_type; //锁的类型 F_RDLCK F_WRLCK,F_UNLCK
 short l_whence;//锁的起始点参照
 int l_start; //锁的起始点的偏移量
 int l_len; //锁的长度
 pid_t l_pid;F_GETLK专用,SET时不用,-1即可
}
锁定起始点  由l_where 和 l_start联合决定
注:1 加读锁/写锁fd要有对应权限
 2 进程结束会释放锁,但程序员应该读写完毕就主动释放锁,fcnl(fd,F_SETLK,&lock)其中lock的l_type设置为F_UNLCK即可

文件锁起始不是对read()/write()等读写函数的锁定,而是阻止其他进程对文件的莫个区域进行加锁,文件锁正确的使用方法是:
 在调用read()之前加读锁,调用write()之前加写锁

F_GETLK测试一个锁能否被加上,如果能加上,会把锁的类型改成G_UNLCK,其他不变,不能加会把锁的成员改成当前正在锁定的那个锁(不能锁的原因),并且把l_pid改成加锁的进程,一般用pid是否等于-1判断是否能加锁。

C语言描述时间的方式
time_t -秒差(和1970年1月1日0点0分0秒的秒差)
struct tm - 结构体 成员包括 年,月,日,小时,分,秒

内存地址表示变量在内存中的位置,i节点表示文件/目录在硬盘中的位置
文件表中存储的数据:1 文件偏移量;2 文件描述符的状态(内存中);3 文件自身的属性(硬盘中文件信息)

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAAwCAIAAABSYzXUAAAQSklEQVR42u1beVBTWb7uN/PmvXkzU++fN++PqZqqqZqqN++vN0uBW3fb42h323arbWu33bQ6OtPKJqCI0qLSgAjihhuyg9AossomUREMMYACIexgmn1JWIKEBFkCCXe+k3O5uUkgpH1WdzuVU6eoe09Obm6+7/x+3/c7N7zG2NsPoL1mh8BOw0trspGRYJFoy61bu27fTm9qstPw/bRt6ekp9fVyjaa0q8spK6uyv99Ow/fQHGJidHo9PW4YGtqemWmn4XtoqxMTu1QqenyhosL3wYNXkgaspOJi5uJFxs+PiYhgKipeMRoChUL/hw+Hnj+PkUjWJSe3P3v26tEADs6fJ+i3tjIjI0xDAxMWxiQkvEpfQzU15VxQsDwu7ou8PMj1KynRBQVMdLTJKIgBE69cTLzahjUwkJHLzV9ATCA+7O27o8HZeYEXRkeZL7+04/Md0nDiBDM0ZP5CR8Vg8VciJieHychgpFJGq/0h3G5DW39uaR16vqi+sKyx6ElLaY2sqrmrpVMhH1ZNTL3ITerU6onW1jGxeKy8fLymZqqnR/9Sv6xuYkJTXY2/S9CQns7cusUb6+khko0Y4XdPT6LabW3fIwc1rT3/4ujymoOzlf6L1Z7/u9V/vcdlr3NpiXnlI2PPrVxwQiZrP3xYsmyZxMHBpDs6NmzY0ObtPfqixndOq51obh4tLu7085O+/jquWfvnPw8kJTFzc4vSMD3NfPUVYYLEhEQy5+bOQg/RuHKFiPX+/UY+zpxh2ttf4M7Uw+ru+u6+5j5lt3J2evYFrhCXI7bOgWX/v0+DtDMLf9ZYWZn0jTfMCUBftqzh/fe50/5r177VTY7X1YFa6ZtvLnBlBwclsouVugFMICauHe2dcSaIa3wC9V09jFrN1NWRDn5EIsbHh2XCxYXJz7f9zmoFtXln82JcYmKc2Z7olSiXsa5Ar9N3VHc0FjfKymX9rf0qhWpSM7ngdfwicoDstiPRM7O6UfVEp1yJdFTwqD729qPAmIJ9p1I+OHD1T58H//fbPvygCUu6Z3kp7eAgRaph40Zlbi5WrqayUiUUjuTn4xhrdig1temTTzChZuVKTLY9v9WuXs3R2bhlS/uhQ4qEhLq1a+lgi5OTDVU06jdnZ6XXXuVwN1NYyLi6GnFPSWGUSubkSWNYCAQ2hefc3Nc+X3MEcD3ZO3l8ZBwTmoXNlq/ejbhreanPj8cDVrfTN5f8UETAf77lRWn4n49OWE7o+PJLgNL00UfTvb0kLzk68tfscFYW5sgjI+lpL1K0bW0gIYFcdutWTU2NHkt7vsmjo7mL4yWrNMAbGfD1PfP22QtbzbUB/cYNZmyMOXyYPQVJNhRKWN0UWcU3Ciz89up2DuvcsFxMKIoqsqQBHUnM7FJv7TsHWANi2ECUPu29liEMji88fi336NXbiJUTkblBsQWnr9+9eLP4p6v2Uxp+95G/2XVmlMoagx5AObtPnbJMHV3+5C3dJ0/S09q//GVufsPKeqMBpIiLw+pTV1YqYmOh/BifHR2lCoEOybFKQ2UlwJ3z8vTMd+v12o3jWQ93ExoQE8hOZWXGkdzcJe8MCQeYXj9wfU5P1Kkqp8qItUsMYiXNPw3H5bfKtZNa1aCqJKGEvtoqbjW71G83HwOsgJ4ozfOpn73hYYs8bDxoXv4MZ2aS/LBjh35yckF56L1wAdOAFzcyY8PuiFYup5PHa2t7QkLocd0778zNzBDfMz+CPvnNN4vTcP8+QTYsTDeg4KMPYpjjx9lToZDIiPs8PWfPLnlzjzMeA9N7EWyCzj+Xz9GQdiJNr9fHucbhuFnUTCeAD/qqKFlkdim6wDOLSVDfETfYqNL+UXlm1+k9exZYIOcgP3DQwBpBA9q8vEhSgk4yzNO//c1Igw1x/6ywkGjJ8uXgjC/R6idPiPr29HCWrAuOaFEaoLpANjycaWnhOBhz+/vOhI0SuYS4JoxQoUfM0gk2FHi5Z3KBad39OoNQMImeiRwN4htihUzBpiyZgs5/EPuAjmQFZ5mUk+oJCquohiyls8n3rUD/o2UuP3/T81frj0CxhRKZ2S3B/BAaoqJQLnBgQUsJDQcO4HhMRFYAlONbRUNPaChmNn/6KZ9d8kExMXQCESHDCGR/1vSCPBqKi1lk4UfnaSgL+sIhxgF95IgHGaE++tgxdsLBg9bvDGIQvz8emA60D5CwndAuKAPoU5op+pacsBw6Eucep+dl5OYOBYW4tYtcCmWBGfT/8fr+q+kPp7Wzs7ol8rj68WMipB9/jHTRf+WKSd1gOB43qGjd229z47Pzu+hWWvP27ZjZHRQ0YggLo+BnZ9MJz+vruUGF6dYpjwaZjAUXN+Hry2ak6OiU+pTdV9bSU9GDeN2IkogEnYlpVttw9zAB1C1ON6NjdbVQmh2cfcP3BtSCs7DJPsnzvoqBlxVcEdDx8dFx7lIlVa0U7mdqUpFFpAt/ssLNMghQ4i2tpHo9OCBq6eWlHRqalsuhFp3+/g2bNmEQajGrJu6gZsUKDjWdWr2EVdVoqN2C/UXpQI4dHZ/u2/cMfpJXsnGJDjlwTqdbiAYsvYAAFlzUCtStAvGQEL0nCQXZgZ0Ii+LAvxqVA5Wd9QViMKPZIdkLozGrhx3qa+ob6mT3UtRDasx/EP2ACji/yrsheAKg/3W569z8twIftx9KYZx2nEj4r7XelIlD4Rk2FVlSKTVLwPqb/fuhE4APNTOs6mRHB7m3iQn+itZb3YogxaBYTGdOdXcTJZDLiZzMzYGScZ5DRWnCXXO0qGghGvBJR44QcGFJQQkUYj4mSIdteJJzM2yHiXfKyrJ+c8LrQqIBqWJ6ClgrsyufZD+pKaxpLGlsq2oblY/yM8/T8qeYnxmUSQTcP41/qfMpRUAZ6Z6euobe+M1Gvz86BTvuCvmD08lfrjtEaXAPS7XR4w9nZCxY6IIVamq5ERC22CaEUW8iIjCzfv16NqpnZpCLGqm6ODrCvBoDcV5yWnfvXoiGhw8Jsm5u7D4f/qJko/kHVdvwMAObxeNA7f6FZ8rngjaBTq9b7OYyAjMAqKyCFcnqvGpLVYh3j5cKpCxtSYS2BI8E/BUmCvmX8rmYCZSBOEFwVLOYOB84n257ef/s3j3UBGY01G/YwBqb+RGYziUv9XTvXszshGrivX19qOBMqPXw4GYqs7ONJmqeHh4NUVEEX/oASC5nDhwwWfhQYxgvPz9upMZ3l2M0Ue9NqZtSG1M1Wo3Znc3OzMa6xgLQZ3LWFdz0u7mgPreIWtgJR29aDtK20z8BKL/jfpHQ2dxtuz213iADQ6mpMEhAv3bNGmJ1tm+nu34cWFi/S+wUzMxIV60iwnD7NmeI+R3WiEtreq0WvNJxSIUFDdSSonpAO3eOjQw+E1CLqirCx/xIQ0aEU5YTtVKr4lf5FftV9FVwwaHsVtLFTtMOzfvI+KnHUs1ooD6KnTDfRxWj/K8KAoAyZADHkAQc/3iZ67+tdHfYGbJ677n1Hpc/84sDB51y5Qvv4EIVuJX7vLGRA7H5k0+sv5GzQIgDs0qNizaNRMLNR5ltDIjHj01pOHqUgItRpCMKNCjhgc5WFU1NxlOUdQwj7hEfvHtwedxyyseGGxuuVl7tUnW1lrUS+3+S1Y+WRy30FFWbGQ0wsphA57Pe6VAyY5qNf//ZSUDvfSGD2iRu+R+7lvOyNtLV5eVcbUXcjs00DCQnE/PzwQdsATFPA4Jgcj6qBr/+2oxvViEMAcGjARUDkK2oIMkHB1AqGh9gIimJuXyZhR4GIDLSyISSXX0jEyOwttszt1My0AMCAgBoejibrO9H3sdpaVIp/iJZqRQqSYEExym+KWy9nfmYo6Eoqsjsq0KcAfrp62TL7/i1XI6GwJiCl0UD9fu9hq2B8dpa22mAMSX8AS5TGtBREtYZAqLDz0+rUMAXINpQafNTlqaqikdDUBAbAXRXg3aQMTDATqDFc3k5sbPchJYWc5M63BwqDn035d3jR44D0GiX6GPHjwULguM8yKZFeRrZqxBcJruzohQRju+E3+HzRHvjw0azbVpYVYCekFeG032nUjga6BbTS2kQCVJYxcaa02BQi0XVRaWi3vfZXXZXuC88nHsv8pXM1ZXaLXMvsH49K+CenjwaIM6AFTchFhtRNmxyse30aTKCD+vqMk6QShe7P0G6wFKNQ06E4G/+nXxIOvVRZallrK0KyDAKg9xEGFQadiej4FE9TrceieJoKCxrfFk0gACu6OXT0LJjx5IxxN93GkhMNBYHJSU9YWFmBLTs3Nl7/nzTtm2cIebRUFJCYPXyYnp7jXVySAj7KtwqLehqa8mWBkcDKFmsohkcW9AXRbhFrIxciawV6RZJ7OmRhLyoPPFNMbVVJE0dTjG7VLdihIIelSXKLpEu2xXK0dDeN/yyaOi7eBGgqAwbSnwaaCWxWOsKCiJuypC4UBijAOSMECV1pKCAHqOMgEKMlZW1+/jwt0/wuTwaUK/TrVMUZWlpRqDBxKVL7Esos6enyW8IuK09qxvxomSRJQ1x5+M8BZ6rE1ef8j61IE9gRaszeSivfj614FPoX6z2nFuqsLK9dQUEABfy9M2Uhk7YdCvPGAz7Iu2HDw+lpTVu3my28IH73Oxsi5MToWHTpoGkpNq33mJZ2bwZ2j5jEFfTp2+wvXQDo6yMPEtwN33eAF80OEge/nAjpaVLP/YZVEnyJVnBWRzKfS3E1cHXCtIEC9LwcdjHiJUtt7bAgF2ouJDelF7ZX7nG5awlDevcwl/iTw5kbm5Ap+/SJQgp9+iNaC9Uc/Em5Z56cnvmmzZ1HD3KRoNhz3y6t7du3TqjKrz3HsZBzyIPQXU6428y4uOJN4Vxor+REQqZ6momNNTEvH6blTihnmivbq/OrebWr2pAZclB5MHIHRk7UIVwjov23wWssaTB80o8nLFZ6Lxwa92zZ8HtjR6IopVo4O2HSxwdO3x9+69epUu+ZsUK7gkPDiD1jR9+iKxl+QMci190z8yQH8JwWKOWhkFCVJpFRlgYMzn5///mA20DlbcrBVcE6f7piZ6Jyd7J8qfsTwXkGjmKQdTn8F3OBc6wXr/2eP/f1+z+0fJ9rzk6//j1v//s3V1/uLSCKx5RzO/J2eN2xy1QGHjp8aUYSUyBrKCks0Qil6D3qntxQdWUasknyZZdHhVl5V2a6uoaQwlNUpO3d/Nnn3FLHk4UH4qOT6e3gRoLd4WOEas0sAujlfw0hhNqfkd1c+8eMzvLfOcNqx53jwSFrwGUg0XBAH1b+jbIjFnoLNlRY4I22sEx7S75ztlOay1piDu/F9SadXw090a/uF1F76zkv0WwzvHDUGs3gExrAw3sdvA4SUQQidRU8mzu0SNjDfEDa1AaLDqULFhxIAkxBJ4Alv9Df4oU6kogjpCyTs8bEQ5n9jhkvecgfNOhypEAWu3osC58aV5XRjoE73UQryLv3X/YYVm0Cd/QOXobUDvKYmlXqc00/PM21Pw0XXDkcR2ZkOYN653/Fi7pcf3bypX9P0F/EM1Og50Ge7PTYKfB3uw02GmwNzsNdhrsban2D9z9kTpzen8JAAAAAElFTkSuQmCC 这是验证码的地址,如何通过with open保存
最新发布
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值