小编Arn*_*anc的帖子

flock():删除没有竞争条件的锁定文件?

我正在将flock()用于进程间命名的互斥锁(即某些进程可以决定对"some_name"进行锁定,这是通过在temp目录中锁定名为"some_name"的文件来实现的:

lockfile = "/tmp/some_name.lock";
fd = open(lockfile, O_CREAT);
flock(fd, LOCK_EX);

do_something();

unlink(lockfile);
flock(fd, LOCK_UN);
Run Code Online (Sandbox Code Playgroud)

应该在某个时候删除锁定文件,以避免使用数百个文件填充临时目录.

但是,此代码中存在明显的竞争条件; 进程A,B和C的示例:

A opens file
A locks file
B opens file
A unlinks file
A unlocks file
B locks file (B holds a lock on the deleted file)
C opens file (a new file one is created)
C locks file (two processes hold the same named mutex !)
Run Code Online (Sandbox Code Playgroud)

有没有办法在某些时候删除锁定文件而不引入这种竞争条件?

c flock

21
推荐指数
2
解决办法
2万
查看次数

如何在现有变量参数列表中添加新参数?

在一个多线程程序中,我正在编写一个自定义打印函数,它接受一个可变参数列表.

void t_printf(char * str, ...)
{
    if(file_ptr != NULL)
    {
            va_list ap;
            va_start(ap, str);

            vfprintf(file_ptr, str, ap);

            va_end(ap);

            fflush(file_ptr);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个函数里面,我想将当前线程id(使用pthread_self())添加到要打印的消息中.我该怎么做?有没有办法将其添加到现有的va_list?

c multithreading variadic-functions

16
推荐指数
2
解决办法
9935
查看次数

php json_encode utf8 char问题(mysql)

我正在使用jQuery的表单中的数据形式写入数据库json_encode.

但是,来自数据库的数据将会损坏.

$db->query("SET NAMES utf8");

$kelime = array("Merhaba","Dünya");
$bilgi = json_encode($kelime);

$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '".$bilgi."'
";
$db->query($incelemeEkle);
Run Code Online (Sandbox Code Playgroud)

数据库表模式;

CREATE TABLE `incelemeRapor` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bigData` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

MySQL插入示例数据;

["Merhaba","Du00fcnya"]
Run Code Online (Sandbox Code Playgroud)

php mysql json utf-8

15
推荐指数
1
解决办法
9192
查看次数

在docker build期间转发SSH代理

在通过dockerfile构建docker镜像时,我必须克隆一个github repo.我已将我的公共ssh密钥添加到我的git hub帐户,我可以从我的docker主机克隆repo.虽然我看到我可以通过$SSH_AUTH_SOCK在docker运行时映射env变量来使用docker host的ssh键docker run --rm -it --name container_name \ -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image.

在docker build中我怎么能这样做?

ssh-keys docker dockerfile docker-compose docker-image

15
推荐指数
3
解决办法
7359
查看次数

bash set -e和i = 0;让i ++不同意

仅当变量的先前值为零时,以下带有调试选项'set -e -v'的脚本才会在增量运算符处失败.

#!/bin/bash
set -e -v
i=1; let i++; echo "I am still here"
i=0; let i++; echo "I am still here"

i=0; ((i++)); echo "I am still here"
Run Code Online (Sandbox Code Playgroud)

bash(GNU bash,版本4.0.33(1)-release(x86_64-apple-darwin10),还有GNU bash,版本4.2.4(1)-release(x86_64-unknown-linux-gnu))

有任何想法吗?

bash shell increment set operator-keyword

12
推荐指数
2
解决办法
3万
查看次数

什么是找出对象是否是数组的最佳方法

据我所知,有三种方法可以找出对象是否是一个数组

isArray功能实施

Array.isArray()
Run Code Online (Sandbox Code Playgroud)

通过 toString

Object.prototype.toString.apply( obj ) === "[object Array]"
Run Code Online (Sandbox Code Playgroud)

并通过 instanceof

obj instanceof Array
Run Code Online (Sandbox Code Playgroud)

有没有理由选择一个而不是另一个?

javascript

12
推荐指数
1
解决办法
245
查看次数

线程函数中的局部变量是否根据线程有separe副本?

我在一个函数中声明了一些局部变量,如下所示:

void* thread_function (void* parameter)
{
   struct parameter * thread_data = (struct parameter *)parameter;
   char buffer[20];
   int temp;
}
Run Code Online (Sandbox Code Playgroud)

如果我在一个线程中创建了两个线程,如果缓冲区和临时更新,那么它会影响其他线程吗?

我的意思是如果有两个线程那么会有两个副本的所有局部变量?

编辑:然后在这种情况下,我需要使用线程特定的数据.我的意思是pthread_setspecific和所有这些东西

c linux multithreading

11
推荐指数
2
解决办法
6623
查看次数

更新浏览器的URL而不重新加载页面

是否可以更改浏览器地址栏中显示的URL而无需浏览器转到该页面?例如,在通过AJAX调用更新页面内容之后?

我的理解是这是不可能的,这就是为什么诸如twitter和facebook之类的网站更新了ajax调用的hash-tag.

直到今天,当我继续使用http://8tracks.com/并开始使用右侧的过滤器...打开和关闭不同类型时,我注意到即使它正在执行ajax调用刷新页面上的内容,URL也在动态更新.

有谁知道他们是怎么做到的?

(除此之外,我目前正在使用Chrome,但当我回去再次使用IE9时,我注意到该网址未被更新..这可能只是Chrome的一部分吗?)

ajax jquery html5 browser-history pushstate

10
推荐指数
1
解决办法
1万
查看次数

如何在C中实现通用宏?

FUNC(param);
Run Code Online (Sandbox Code Playgroud)

如果paramchar *,派遣func_string.

什么时候int发送到func_int

我认为可能有一个解决方案,因为变量类型在编译时是已知的.

c macros types generic-programming

10
推荐指数
3
解决办法
5567
查看次数

当URL包含片段时,iframe会导致父元素在Google Chrome上向上滚动

在Google Chrome(37.0.2062.122,OSX/Windows)上,带有包含片段的网址的iframe会导致父元素向上滚动.

它只发生在Chrome中(在Safari和Firefox中测试过).

这是一个显示问题的小提琴:http://jsfiddle.net/wmz5cu1y/1/(你必须点击Run 两次.)

如您所见,<body>包含iframe 的整体已向上滚动.标题是隐藏的,因为它现在位于窗口上方,并且页面底部有一个意外的空白区域.

怎么避免这个?

赏金提供了非js变通方法​​或简单的html文档来重现这个问题.

iframe溢出身体

html iframe google-chrome jsfiddle

10
推荐指数
3
解决办法
6053
查看次数