fcntl函数之文件锁 F_SETLK

fcntl函数之文件锁 F_SETLK

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>/**
*
*./myfcntl contentstruct flock {...short l_type;     F_RDLCK,F_WRLCK,F_UNLCKshort l_whence;   How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_ENDoff_t l_start;    Starting offset for lockoff_t l_len;      Number of bytes to lockpid_t l_pid;      PID of process blocking our lock (set by F_GETLK and F_OFD_GETLK)...};*
*/
int lock_reg(int fd, int cmd, short lock_type, short lock_whence, off_t lock_start, off_t lock_len)
{struct flock lock;lock.l_type = lock_type;lock.l_whence = lock_whence;lock.l_start = lock_start;lock.l_len = lock_len;lock.l_pid = getpid();if (fcntl(fd, cmd, &lock) < 0) {if (errno == EACCES || errno == EAGAIN ) {printf("file lock by other processes.\n");return -1;}printf("lock file fail.\n");return -1;}if (lock_type == F_WRLCK) {printf("lock by %d.\n", getpid());} else if (lock_type == F_UNLCK) {printf("unlock by %d.\n", getpid());}return 0;
}int reg_lock(int fd)
{return lock_reg(fd, F_SETLK, F_WRLCK, 0, SEEK_SET, 0);
}
int reg_unlock(int fd)
{return lock_reg(fd, F_SETLK, F_UNLCK, 0, SEEK_SET, 0);
}/*
*
*.myfcntl AAAAAA
*/
int main(int argv, char *argc[])
{char *buf;int i;int ret;int fd;if (argv < 2) {printf("argc error!\n");return -1;}fd = open("processes.txt", O_CREAT|O_RDWR|O_APPEND, 777);ret = reg_lock(fd);if (ret !=0 ) {return -1;}sleep(5);buf = argc[1];i = 0;while (i < strlen(buf)) {if (write(fd, buf+i, sizeof(char)) < sizeof(char)) {printf("printf out error!\n");return -1;}printf(" %c:out by pid %d.\n", buf[i], getpid());i++;sleep(1);}ret = reg_unlock(fd);if (ret !=0 ) {return -1;}close(fd);return 0;
}

在不同终端下,同时运行程序。第二个进程直接提示退出。
lock by 18709.
file lock by other processes.
B:out by pid 18709.
B:out by pid 18709.
B:out by pid 18709.
B:out by pid 18709.
B:out by pid 18709.
B:out by pid 18709.
B:out by pid 18709.
unlock by 18709.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uva 1625——Color Length

题意&#xff1a;给定两个长度分别为n和m 的颜色序列&#xff0c;要求按顺序合并成一个序列&#xff0c;即每次可以把开头的颜色放到新序列末尾&#xff0c;跨度l&#xff08;c&#xff09;等于最大和最小的位置之差。 思路&#xff1a;递推&#xff0c;f&#xff08;i,j&#…

刚刚注册,打声招呼先

我今天终于注册了一个属于自己的博客了。我没有用过博客&#xff0c;也很少去看别人的博客。但是登陆了计算机图形学的老师推荐的博客后&#xff0c;我觉得博客还真是个好东西。向别人展示自己的经验心得&#xff0c;与别人共享好的东西。我喜欢与人分享一切美好的东西。共享&a…

fcntl函数之文件锁 F_SETLKW

fcntl函数之文件锁 F_SETLKW F_SETLK与F_SETLKW的区别&#xff1a; F_SETLK设的锁遇到锁被其他进程占用时&#xff0c;会立刻停止进程。 F_SETLKW上锁是阻塞方式。设置的锁因为其他锁而被阻止设置时&#xff0c;该命令会等待相冲突的锁被释放。 #include <stdio.h> #inc…

uva 1331——Minimax Triangulation

题意&#xff1a;三角刨分&#xff0c;把一个m边形分解成m-2个三角形&#xff0c;求一个最大三角形最小的刨分&#xff0c;输出最小的那个三角形面积。 思路&#xff1a;递推。可能需要一点几何思维&#xff0c;d&#xff08;i&#xff0c;j&#xff09;为多边形的最优解&#…

泛型笔记

所谓泛型&#xff0c;即通过参数化类型来实现在同一份代码上操作多种数据类型。&#xff08;类型的 多态&#xff09; 是一种编程范式&#xff0c;它利用“参数化类型”讲类型抽象化&#xff0c;从而实现更为灵活的复用。 1&#xff0c;可重用行 2&#xff0c;类型安全&#xf…

进程创建fork-小代码

进程创建fork #include <sys/types.h> #include <unistd.h> pid_t fork(viod) 返回值&#xff1a;,在子进程中返回0&#xff1b;在父进程中返回大于0的进程号&#xff1b;小于0&#xff0c;出错。 fork()函数调用一次&#xff0c;返回两次&#xff0c;分别是在子进…

给有钱人办教育

今天&#xff0c;看新闻上&#xff0c;报道了&#xff0c;贷款利率又上升了。这 年头&#xff0c;什么都上涨&#xff0c;物价&#xff0c;房价&#xff0c;粮价&#xff0c;失业率也在逐年攀升&#xff0c;唯一不上涨的就是工资了&#xff0c;反而有很多很多的大学生正一次又一…

进程创建fork--文件表项继承

进程创建fork–文件表项继承 子进程继承父进程的文件描述表&#xff0c;不继承共享文件表项和iNode。 父进程创建一个子进程后&#xff0c;文件表项中的引用计数器加1变为2&#xff0c;当父进程操作close操作后&#xff0c;计数器减1&#xff0c;子进程还是可以使用文件表项&am…

论ACM ICPC_Ruins He

这段时间老是有许多新人向我问到ACM相关的问题。比如它与工作的关系&#xff0c;对我以后的工作到底有没有帮助&#xff1f;还比如说第二年的训练计划应该是什么样的&#xff1f;还有的孩子问到&#xff0c;我寒假玩儿的一个寒假&#xff0c;又该怎么办&#xff1f; 看到这些问…

查询分析器下如何备份数据库

查询分析器下如何备份数据库backupdatabasemsdb todiskd:\msdb.bakOK搞定转载于:https://www.cnblogs.com/CnKker/archive/2006/09/26/515318.html

Inside Dynamics Axapta源代码赏析(四)

第八章:Developing Applications Using Business Connector 这一章的代码主要演示如何通过Business Connector与Axapta交互在Dynamics Axapta的客户端安装目录中找到Microsoft.Dynamics.BusinessConnectorNet.dll这个文件,添加到VS.NET的工程中.1.HelloWorldBC.csclassHelloWor…

uva 1629——Cake slicing

题意&#xff1a;有一个n行m列网格蛋糕上有一些樱桃&#xff0c;每次可以把蛋糕一刀切成两块&#xff0c;最后使每块蛋糕上都有一个樱桃且切割线总长度最小。 思路&#xff1a;区间dp&#xff0c;记忆化搜索整个过程&#xff0c;然后分区间从上到下&#xff0c;从左到右&#x…

信号之SIGCHLD

信号之SIGCHLD SIGCHLD信号是子进程结束时发出来的信号&#xff0c;可用于在程序中捕获子进程结束的信号然后用wait函数将子进程资源回收。 优点&#xff1a;不会使父进程一直阻塞在wait函数处。 #include <signal.h> #include <stdio.h> #include <string.h&g…

uva 242——Stamps and Envelope Size

题意&#xff1a;给定最大贴邮票上限和若干个邮票组合&#xff0c;求最大的连续邮资的一个组合&#xff0c;如果有多个&#xff0c;按字典序输出最大的一个。 思路&#xff1a;对每一组邮票&#xff0c;求出当邮资为i时需要邮票数的最小值d[i]&#xff0c;边界为d[0]0、d[i]>…

js常用

//关闭,父窗口弹出对话框,子窗口直接关闭this.Response.Write("<script languagejavascript>window.close();</script>");//关闭,父窗口和子窗口都不弹出对话框,直接关闭this.Response.Write("<script>");this.Response.Write("{to…

信号之kill-raise

信号之kill-raise kill(),raise()都是信号发送函数 #include <signal.h> int kill(pid_t pid, int signo); kill函数向指定的进程发送信号。 int raise(int signo); raise函数向本进程发送信号,相当于kill(getpid(), int signo). #include <sys/types.h> #include…

Google 代码搜索

今天在CSDN上看到的消息&#xff0c;google推出了CodeSearch的服务&#xff0c;上去一测试&#xff0c;吓死我了&#xff01; 代码的秘密全无了&#xff01; http://www.google.com/codesearch/ 你可以试试你的代码看看&#xff01; 比如&#xff1a;搜索以下&#xff1a;on er…

uva 10723——Cyborg Genes

题意&#xff1a;输入两个A-Z组成的字符串&#xff0c;找到一个最短的串&#xff0c;使得两个串均是他的子串。 思路&#xff1a;最长公共序列问题。当i和j相等时&#xff0c;dp[i][j]dp[i-1][j-1]&#xff0c;不等时就是max(dp[i-1][j],dp[i][j-1]),如果当前的统计的数量大于s…

信号之函数的可重入性

信号之函数的可重入性 在调用某个函数过程中出现中断信号&#xff0c;且改信号处理函数中再次调用该函数&#xff0c;访问全局、静态变量的函数是不可重入函数。 前后数据不一致&#xff0c;函数是不可重入的&#xff0c;特点&#xff1a;函数中使用全局变量或静态变量。 前后数…

ASP.NET 中处理页面“回退”的方法

我们在编写基于 ASP.NET 的应用程序时&#xff0c;如果代码执行出错或检测到异常&#xff0c;一般会提示用户“返回”或“回退”&#xff0c;或者在多步操作、列表/详细的查看界面中&#xff0c;也会给用户提供回退到上一页面的链接&#xff0c;对于这种情况&#xff0c;大家很…