当前位置: 首页 > news >正文

熊掌号做网站推广的注意事项门户网站建设和检务公开整改

熊掌号做网站推广的注意事项,门户网站建设和检务公开整改,二手交易平台网站的建设,网站的风格对比信息表2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报分类#xff1a;linux系统编程#xff08;19#xff09; 版权声明#xff1a;本文为博主原创文章#xff0c;未经博主允许不得转载。 一、fcntl函数 功能#xff1a;操纵文件描述符#xff0c;改变已打开的文件的属性 int…     2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类 linux系统编程19  版权声明本文为博主原创文章未经博主允许不得转载。 一、fcntl函数 功能操纵文件描述符改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ );   cmd的取值可以如下 复制文件描述符F_DUPFD (long) 设置/获取文件描述符标志F_GETFD (void)F_SETFD (long) 设置/获取文件状态标志F_GETFL (void)F_SETFL (long) 获取/设置文件锁F_GETLKF_SETLKF_SETLKW   其中复制文件描述符可参见《linux系统编程之文件与I/O五打开文件的内核结构file和重定向》文件描述符的标志只有一个即FD_CLOEXEC设置/获取文件描述符标志看这里。下面先来看设置/获取文件状态标志。 F_SETFL: On Linux  this  command can change only the O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK flags. 示例程序如下   C Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667   /*************************************************************************     File Name: file_fcntl.c     Author: Simba     Mail: dameng34163.com     Created Time: Sat 23 Feb 2013 02:34:02 PM CST ************************************************************************/#includesys/types.h#includesys/stat.h#includeunistd.h#includefcntl.h#includestdio.h#includestdlib.h#includeerrno.h#includestring.h#define ERR_EXIT(m) \    do { \        perror(m); \        exit(EXIT_FAILURE); \    } while(0)void set_flag(int, int);void clr_flag(int, int);int main(int argc, char *argv[]){    char buf[1024]  {0};    int ret;    /*        int flags;        flags  fcntl(0, F_GETFL, 0);        if (flags  -1)            ERR_EXIT(fcntl get flag error);        ret  fcntl(0, SETFL, flags | O_NONBLOCK); //设置为非阻塞,但不更改其他状态        if (ret  -1)            ERR_EXIT(fcntl set flag error);    */    set_flag(0, O_NONBLOCK);    ret  read(0, buf, 1024);    if (ret  -1)        ERR_EXIT(read error);    printf(buf%s\n, buf);    return 0;}void set_flag(int fd, int flags){    int val;    val  fcntl(fd, F_GETFL, 0);    if (val  -1)        ERR_EXIT(fcntl get flag error);    val | flags;    if (fcntl(fd, F_SETFL, val)  0)        ERR_EXIT(fcntl set flag error);}void clr_flag(int fd, int flags){    int val;    val  fcntl(fd, F_GETFL, 0);    if (val  -1)        ERR_EXIT(fcntl get flag error);    val  ~flags;    if (fcntl(fd, F_SETFL, val)  0)        ERR_EXIT(fcntl set flag error);} 测试输出   simbaubuntu:~/Documents/code/linux_programming/APUE/File_IO$ ./file_fcntl read error: Resource temporarily unavailable 因为将标准输入的状态更改为非阻塞则read不会阻塞等待输入而立即返回错误errno将被置为EAGAIN即可以重新尝试。   二、文件锁结构体 struct flock {...short l_type;       /* Type of lock: F_RDLCK,        F_WRLCK, F_UNLCK */short l_whence; /* How to interpret l_start:                                   SEEK_SET, SEEK_CUR, SEEK_END */off_t l_start;       /* Starting offset for lock */off_t l_len;         /* Number of bytes to lock */pid_t l_pid;        /* PID of process blocking our lock                                   (F_GETLK only) */     ...}; 文件锁的类型只有两种一种是写锁也叫排他锁一种是读锁也就共享锁可以有多个进程各持有一个读锁但只能有一个进程持有写锁只有对文件有对应的读写权限才能施加对应的锁类型。中间三个参数 l_whence,  l_start, l_len 决定了被锁定的文件范围。当fcntl 函数的cmd为F_GETLK时flock 结构体的 l_pid 参数会返回持有写锁的进程id。进程退出或者文件描述符被关闭时会释放所有的锁。   示例程序如下   C Code  1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253   /*************************************************************************     File Name: file_flock.c     Author: Simba     Mail: dameng34163.com     Created Time: Sat 23 Feb 2013 02:34:02 PM CST ************************************************************************/#includesys/types.h#includesys/stat.h#includeunistd.h#includefcntl.h#includestdio.h#includestdlib.h#includeerrno.h#includestring.h#define ERR_EXIT(m) \    do { \        perror(m); \        exit(EXIT_FAILURE); \    } while(0)int main(int argc, char *argv[]){    int fd;    fd  open(test2.txt, O_CREAT | O_RDWR | O_TRUNC, 0664);    if (fd  -1)        ERR_EXIT(open error);    /* 只有对文件有相应的读写权限才能施加对应的文件锁 */    struct flock lock;    memset(lock, 0, sizeof(lock));    lock.l_type  F_WRLCK; // 排他锁,即不允许其他进程再对其加任何类型的锁但读锁共享锁允许    lock.l_whence  SEEK_SET;    lock.l_start  0; //从文件开头开始锁定    lock.l_len  0; // 文件全部内容锁住    if (fcntl(fd, F_SETLK, lock)  0)    {        /* 若为F_SETLKW,这时如果锁已经被其他进程占用则此进程会阻塞直到其他进程释放锁*/        printf(lock success\n);        printf(press any key to unlock\n);        getchar();        lock.l_type  F_UNLCK;        if (fcntl(fd, F_SETLK, lock)  0)            printf(unlock success\n);        else            ERR_EXIT(unlock fail);    }    else        ERR_EXIT(lock fail);    return 0; //进程退出会对所有文件解锁}   测试如下 我们先在一个 终端执行程序 simbaubuntu:~/Documents/code/linux_programming/APUE/File_IO$ ./file_flock lock successpress any key to unlock   现在文件已经被锁住了而且没有按下任何按键所以卡在这里也还没解锁接着在另一个终端再次执行同个程序 simbaubuntu:~/Documents/code/linux_programming/APUE/File_IO$ ./file_flock lock fail: Resource temporarily unavailable 会立即返回错误因为我们希望施加的是排他锁而现在前面一个进程正在占用写锁还没释放所以尝试施加锁失败而如果fcntl 函数的cmd 设置为 F_SETLKW即带w的版本则此进程会一直阻塞直到前面一个进程释放了锁。   参考《APUE》
http://www.yutouwan.com/news/299022/

相关文章:

  • 主流大型网站开发语言调查网站图片怎样做seo优化
  • 网站开发要花费多少钱wordpress 下载插件xydown
  • 便宜的seo官网优化泰安短视频seo
  • 做网站找哪个公司wordpress密码文章插件
  • 福建省住房和建设网站企业微信营销管理软件
  • 安徽商城网站建设xydown wordpress
  • 百度网站官网入口WordPress的目录大纲
  • 网站备案主体负责人网站做优化一般几个字
  • 企业建设项目哪个网站可以查凡科建设网站
  • 国外公司在国内建网站提供做网站企业
  • 河源北京网站建设google服务框架
  • 中地海外路桥建设有限公司网站做暖暖视频免费观看免费网站
  • 长春网站优化咨询济南最新消息今天
  • 72建站网如何建设一个药材网站智能建造技术就业前景
  • 内蒙古自治区住房和城乡建设厅官网大型网站和小企业站优化思路
  • 020网站模板智能网站建设软件有哪些方面
  • 网站界面分类国家城乡建设网站
  • 太原网站建设团队科技是第一生产力
  • 做网站高亮安装wordpress报错
  • 印刷报价下单网站开发纯静态网站索引怎么做
  • 吕梁做网站公司东莞属于哪个省哪个市
  • 酒店网站建设系统介绍做明星ps黄图网站
  • 学网站开发培训班进度环wordpress
  • 手机电脑网站建设黄页app
  • wordpress 筛选文章安全优化大师下载
  • 品牌电商网站专业网站设计哪家好
  • 网站建设与维护下载环保局 网站建设
  • 暴雪战网官方网站入口效果图哪个网站好
  • php网站免费模板市场营销数字营销
  • 万网网站后台留言在哪外贸公司销售渠道