- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我改进了我的信号处理功能,但现在当我尝试通过 gcc ./test2.c -Wall -Wextra
编译我的程序时,我收到以下信息;
./test2.c: In function 'end_app':
./test2.c:21: warning: implicit declaration of function 'flock'
./test2.c: In function 'main':
./test2.c:46: warning: implicit declaration of function 'usleep'
./test2.c:47: warning: implicit declaration of function 'close'
这是test2.c的源码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <fcntl.h>
static int end=0;
static int f;
static void end_app(int sig){
printf("Ending from sig#%d",sig);
struct sigaction si;
si.sa_handler=SIG_DFL;
si.sa_flags=0;
sigaction(SIGCHLD,&si,NULL);
sigaction(SIGTSTP,&si,NULL);
sigaction(SIGTTOU,&si,NULL);
sigaction(SIGTTIN,&si,NULL);
sigaction(SIGSEGV,&si,NULL);
sigaction(SIGTERM,&si,NULL);
sigaction(SIGHUP,&si,NULL);
flock(f,LOCK_UN); //compiler gives implicit declaration warning
printf("Ended\n");end=1;
}
void newsig(){
struct sigaction s,o;
o.sa_handler=SIG_DFL;
o.sa_flags=0;
s.sa_handler=&end_app;
s.sa_flags=SA_RESTART;
sigaction(SIGCHLD,&s,&o);
sigaction(SIGTSTP,&s,&o);
sigaction(SIGTTOU,&s,&o);
sigaction(SIGTTIN,&s,&o);
sigaction(SIGSEGV,&s,&o);
sigaction(SIGTERM,&s,&o);
sigaction(SIGHUP,&s,&o);
}
int main(){
f=open("xx.pid",O_WRONLY|O_CREAT|0x700);
flock(f,LOCK_EX); //function works here
printf("Started\n");
newsig();
while(1){
usleep(1000);
if (end==1){close(f);return 0;}
}
return 0;
}
我的问题是为什么编译器会提示在我的信号处理函数中使用了 flock 但它不会在 main 函数中提示它?我该怎么做才能纠正这个问题?我需要 flock 才能成功锁定和解锁文件。
最佳答案
正如警告所说,flock
功能是implicitly declared第一次使用它。由于它已经(隐式地)在文件的前面声明,编译器不会提示后面的用法。
如果您注释掉第一个调用,那么它应该提示第二个。
您应该包含声明函数的头文件以消除警告。根据manpage link在上面 Joachim Pileborg 的评论中,标题是 <sys/file.h>
.
关于C 警告 : implicit declaration of function 'flock' only applies to one of two flock() calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182748/
我改进了我的信号处理功能,但现在当我尝试通过 gcc ./test2.c -Wall -Wextra 编译我的程序时,我收到以下信息; ./test2.c: In function 'end_app'
对不起,我不能完全集中我的问题。 我正在尝试使用 flock 来避免同时运行脚本,如已接受的答案中所述: How to prevent a script from running simultaneo
此代码是在 pythonanywhere (linux) 上托管的 python 3.5。 我正在使用 with open 来管理一个非阻塞的 flock,但有时调度的进程会遇到异常,导致作业终止;没
我写了一个简单的代码来测试 flock(): int main (int argc, char * const argv[]) { int fd1; if (fd1 = open( "
以下代码在调用 file_get_contents 时触发文件不存在的错误,尽管这种情况很少发生,即使 file_exists 仅在上面的几个语句中被调用。 我认为在调用 file_exists 期间
If a process uses open(2) (or similar) to obtain more than one descriptor for the same file, these d
在我的 bash 脚本开始时,我运行 flock 以确保脚本不会同时运行两次。脚本的一部分是显示 xclock,但作为后台命令。所以我看到时钟并且脚本完成(时钟仍然明显显示)。但是当我想重新启动脚本时
我想同步对文件的访问。我正在使用 Linux 和 g++。 我想使用函数 flock() 锁定文件。我开发了 2 个测试应用程序写入和读取同一个文件。他们都使用 LOCK_SH 调用 flock()。
在这种情况下我需要帮助, 在处理请求时出于某种原因我需要写入文件,所以我使用 flock 来确保同一时间只有一个请求写入文件。 我的问题是当一个请求调用在被其他请求锁定期间蜂拥而至时会发生什么。是等到
折腾了PHP源码半个小时后,我放弃了。 :P 问题是 - PHP flock() 函数调用在 Gentoo Linux 系统上归结为什么系统调用?我遇到了一些问题(比如 block-for-30-se
我无法弄清楚为什么 flock() 在以下情况下无法正常运行。 以下代码被放入两个不同的 PHP 脚本中,一个是“test1.php”,另一个是“test2.php”。代码的要点是创建一个其他进程(正
我正在使用 flock() 函数通过获取临时文件的锁来检查脚本的另一个实例是否已经在运行,因此下一个实例应该检查文件是否未被锁定,否则它将停止
我正在测试从其他线程锁定文件描述符是否会影响主线程。 #include #include #include #include #include #include //#include #
在 Linux 的 bash 脚本中,我使用 flock [命令 flock,而不是系统调用 flock()] 来实现文件锁定,从而保护对共享资源 [这是 tmpfs 中的文件] 的并发访问。 我有陷
我的印象是flock(2)是线程安全的,我最近在代码中遇到了这样的情况,其中多个线程能够在同一个文件上获得锁,这些文件都与使用 c api flock 获取独占锁同步。进程25554是一个多线程应用程
想象以下 Perl 代码(此处为伪代码): successfully acquired flock for FILEHANDLER # line 1 some error or maybe
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章PHP flock 文件锁详细介绍由作者收集整理,如果你对这篇文章有兴趣
使用 O_EXLOCK 标志调用 open() 与仅调用 open() 然后调用 有什么区别羊群()?后者具有潜在的竞争条件,但除此之外,两种方式都获得了对文件的独占进程锁,对吗? 最佳答案 唯一的区
大家好。我正在设置一个 cron 作业来执行 bash 脚本,我担心下一个可能会在前一个结束之前开始。稍微谷歌一下就会发现解决这个问题的一种流行方法是 flock 命令,使用方式如下: flock -
当我尝试通过 cron 作业执行 flock 时出现错误。 我正在执行 * * * * * /usr/bin/flock -n /usr/local/monitor/asdp_cloudwatch/r
我是一名优秀的程序员,十分优秀!