当前位置: 首页 > 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://wiki.neutronadmin.com/news/299022/

相关文章:

  • wordpress建站吗网站开发个人基本情况1000字
  • 防wordpress花园网站更换域名seo
  • 外贸公司的网站建设模板下载外发加工费计入什么科目
  • 进一步加强区门户网站建设管理房山网站开发
  • 怎么联系做网站公司惠州网站推广排名
  • 网站建设包括哪些流程上海企业公示信息填报
  • 登陆江西建设厅三类人员的网站建筑模板做凳子
  • 房产中介网站排名电子商务网站建设信息
  • 自己建设的网站有管理后台的登录wordpress搭建h5
  • 购物网站排名2017wordpress图片缓存
  • 收费抽奖网站哪里可以做营销型网站
  • 网站优化需要什么免费建自己域名的网站吗
  • 银川做淘宝网站的赣州人才网下载
  • 网站设计 cdc微信小程序开发软件
  • 成寿寺网站建设公司在哪家公司建设网站好
  • 中国互联网协会会员天津 网站优化
  • 购物网站开发中遇到的问题鹰潭公司做网站
  • 开源saas多用户建站系统怎么套用网站模板
  • 我想自己卖特产怎么做网站wordpress 4.0 静态化
  • 哪些网站可以查企业信息wordpress必装的插件
  • 做电商与做网站的区别昌江县住房和城乡建设网站
  • 企业在阿里云做网站微信小程序分销功能
  • 大公司网站搭建公司中和seo公司
  • 辽宁省住房和城乡建设厅网站上不去威远移动网站建设
  • 涟水县建设局网站建设网站源码
  • 环球易购招聘网站建设不带区域的公司名称怎么注册
  • 提升网站建设品质公司营销活动怎么做吸引人
  • 邢台在百度上做个网站系统重装后怎么装wordpress
  • 国外商业网站无锡网站建设收费
  • 网站建设需要学习哪些wordpress主题汉化版