gpt4 book ai didi

c - 不同的pid cgi程序

转载 作者:行者123 更新时间:2023-11-30 17:56:56 25 4
gpt4 key购买 nike

我用 C 语言编写了这个测试 CGI 程序。

int main(int argc, char *argv[])
{
sem_t *mysem;

mysem = sem_open("/MyClient", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 10);
if(mysem == SEM_FAILED)
{
// already running
if(errno == EEXIST)
{
fprintf(stdout, "Content-type:text/plain\n\n");
fprintf(stdout, "Already running");
exit(1);
}
else
{
fprintf(stdout, "[error] - ", errno);
exit(1);
}
}

fprintf(stdout, "Content-type:text/plain\n\n");
int i = 0;
for(;i <10; i++)
{
sleep(1);
}

fprintf(stdout, "all done by PID - %d\n", getpid());

sem_unlink("MyClient");
sem_close(mysem);

return 0;
}

我正在使用 Apache 作为 Web 服务器。当我在浏览器中转到“localhost/cgi-bin/mycgi”时(我同时打开两个选项卡)。

输出应该像这样(预期)

(对于选项卡 1)“全部由 PID - 8186 完成”

和(对于 Tab2)“已经运行”

但我明白了(实际)

(对于选项卡 1)“全部由 PID - 8186 完成”

和(对于 Tab2)“全部由 PID - 8187 完成”

如果我在终端中执行程序(2 个实例),上面的代码将按预期工作。

最佳答案

来自 Ubuntu 的 man sem_overview:

A named semaphore is identified by a name of the form /somename; that is, a null-terminated string of up to NAME_MAX-4 (i.e., 251) characters consisting of an initial slash, followed by one or more characters, none of which are slashes.

IOW,您的信号量名称无效。

另一件事,来自 man sem_open:

If O_CREAT is specified in oflag, then two additional arguments must be supplied. ...

该函数将随机获取 modevalue 数据,从而产生可预测的不可预测的结果。

关于c - 不同的pid cgi程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com