如何识别特定文件是否在C中第一次被调用
执行C程序时,应将调试打印插入日志文件(如log.txt), 但是这个C程序是从不同的地方执行的。 因此,在log.txt中找到了多个日志 我希望调试在log.txt中只出现一次。 如何插入一个签入C程序来实现上述要求 我尝试过使用静态变量,但它只有在第一次调用函数时才起作用 不是档案。如何识别特定文件是否在C中第一次被调用,c,linux,C,Linux,执行C程序时,应将调试打印插入日志文件(如log.txt), 但是这个C程序是从不同的地方执行的。 因此,在log.txt中找到了多个日志 我希望调试在log.txt中只出现一次。 如何插入一个签入C程序来实现上述要求 我尝试过使用静态变量,但它只有在第一次调用函数时才起作用 不是档案。 访问功能是否有助于此场景???您需要一些方法让程序存储它们所做的事情,称之为 最简单的方法是使用共享位置,如/var/run/来放置信号量文件。然后每个程序都尝试创建该文件。如果它已经存在,他们可以假设其他人已
访问功能是否有助于此场景???您需要一些方法让程序存储它们所做的事情,称之为 最简单的方法是使用共享位置,如
/var/run/
来放置信号量文件。然后每个程序都尝试创建该文件。如果它已经存在,他们可以假设其他人已经执行了该操作
为此,我们使用系统调用(而不是fopen
)进行精细控制。同时使用O_create
和O_exc
标志表示创建文件,如果文件已经存在,则显示错误。这是原子的,我们正在检查文件是否存在,并在一次操作中创建它。两个程序不可能同时意外地检查和创建
#include <stdio.h>
#include <fcntl.h>
#include <stdbool.h>
bool check_semaphore(const char *file) {
if( open(file, O_CREAT|O_EXCL) >= 0 ) {
return true;
}
else {
return false;
}
}
int main() {
if( check_semaphore("did_debug_log") ) {
FILE *log = fopen("log.txt", "a");
if( !log ) {
perror("Couldn't open log.txt");
}
fprintf(log, "Some debug stuff\n");
}
}
#包括
#包括
#包括
布尔检查信号量(常量字符*文件){
如果(打开(文件,O|u创建| O_排除)>=0){
返回true;
}
否则{
返回false;
}
}
int main(){
if(检查信号量(“did调试日志”)){
文件*log=fopen(“log.txt”,“a”);
如果(!log){
perror(“无法打开log.txt”);
}
fprintf(log,“一些调试内容”\n);
}
}
您可以使用更复杂的共享存储作为信号量,如共享内存或共享数据库(如SQLite),但基本技术是相同的。检查操作是否已完成,同时声明您将在原子操作中执行此操作。多个程序是否同时运行并全部写入同一个日志文件?是否希望多个程序只记录一次该文件?或者您希望一次只运行一个程序?该方法可以,但我希望在特定位置创建“did_debug_log”文件。我没有在主文件夹或c程序所在的任何位置创建的设置executed@fox18您可以将文件放在适合您的环境的任何位置。也许在日志文件旁边。