小编car*_*los的帖子

模式中的postgresql序列nextval

我在架构内的postgresql 9.3上有一个序列.

我可以做这个:

从foo中选择last_value,increment_by."SQ_ID";

last_value | increment_by
------------+--------------
          1 |            1 (1 fila)
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

SELECT nextval('foo.SQ_ID');

ERROR:  no existe la relación «foo.sq_id»
LÍNEA 1: SELECT nextval('foo.SQ_ID');
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

它说不存在关系«foo.sq_id»,但它存在.

postgresql postgresql-9.3

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

C中的文字字符:是int还是char?

如果我宣布:

int i = 0 + 'A';
Run Code Online (Sandbox Code Playgroud)

'A'考虑char还是int

有些人可能会使用:

int i = 0 + (int)'A';
Run Code Online (Sandbox Code Playgroud)

但这真的有必要吗?

c casting type-conversion

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

使用fclose管道popen是一个严重的错误?

几个月前,我写了一个用于Linux的CGI应用程序,用于popen()读取命令的输出,然后我关闭管道fclose().

现在,我读到需要使用密切管道pclose().

手册说:

返回值popen()是一个正常的标准I/O流,除了必须用pclose()而不是 关闭之外,它在所有方面都是fclose(3).

我的代码是这样的:

if ((NULL != (f = popen(command.value, "r")))) {
    //do something
    fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

我的错误有安全问题吗?该计划目前正在制作中.在测试中它没有做任何问题.真正需要的,用打补丁pclose()来代替fclose()?注意:我只在程序中打开一次PIPE.

今天,在我当地的家里,我做了一些测试,fclose()pclose()没有返回EOF表示失败.

c linux popen fclose pclose

7
推荐指数
2
解决办法
3276
查看次数

堆栈溢出在linux上沉默?

在Linux上我有一个代码,它使用在main函数内声明的数组,其中6e为2MB + 1字节

#include <stdio.h>
#include <stdlib.h>

#define MAX_DATA (2097152)  /* 2MB */

int main(int argc, char *argv[])
{
    /* Reserve 1 byte for null termination */
    char data[MAX_DATA + 1];

    printf("Bye\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用gcc在Linux上编译时,我运行它没有任何问题.但是在Windows上我遇到了运行时错误.在运行的那一刻,我有5GB的可用内存.

要解决Windows上的问题,我需要指定其他堆栈大小:

gcc -Wl,--stack,2097153 -o test.exe test.c
Run Code Online (Sandbox Code Playgroud)

或者在主函数之外声明数据数组.

因为在linux上编译的程序是在没有改变堆栈大小的情况下链接的?

为什么它在Linux上运行正常但在Windows上运行失败?我使用相同的源代码和相同的gcc指令:

gcc -Wall -O source.c -o source
Run Code Online (Sandbox Code Playgroud)

因为linux上的malloc实现我认为不可靠,因为即使内存不可用它也可以返回非空指针.

我认为在Linux上运行的程序中,它可能会默默地忽略堆栈问题?

有可能是Linux上运行的程序没有链接改变堆栈大小,但在运行时不像Windows那样失败,是否会默默地忽略堆栈问题?

另外,为什么如果我在主函数之外声明数组它在Windows上正常工作?万一它使用堆为什么我不需要免费呢?

c linux windows stack

3
推荐指数
1
解决办法
183
查看次数

使用 FILE_FLAG_DELETE_ON_CLOSE 在子进程中共享读取文件的权限而不关闭句柄

我正在创建一个文件句柄,以便在关闭时删除,并具有读取权限。我需要在不关闭句柄的情况下(因为它会删除文件)创建一个可以读取该文件的进程。

这是我的实现:我创建一个文件,在没有关闭的情况下尝试用记事本打开该文件,但它不能。我该如何解决这个问题。我想我可以成为 CreateProcess 参数中的一些东西,但我不知道。

请帮忙。

#include <windows.h>

int main(int argc, char * argv[])
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si;
    HANDLE hFile;
    TCHAR text[] = "This is a text";
    DWORD dwWrited;

    hFile = CreateFile(
    "data.txt",
    GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    CREATE_ALWAYS,
    FILE_FLAG_DELETE_ON_CLOSE
    ,NULL
    );

    WriteFile(hFile, text, sizeof(text), &dwWrited, NULL);
    FlushFileBuffers(hFile);

    memset(&pi, 0, sizeof(pi));
    memset(&si, 0, sizeof(si));
    CCreateProcess(TEXT("C:\\Windows\\System32\\Cmd.exe"),
              TEXT("/C \"Notepad.exe data.txt\""),
              NULL, NULL, FALSE, 
              NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);


    puts("Press a key for close the file");
    getchar();
    CloseHandle(hFile);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c winapi

2
推荐指数
1
解决办法
305
查看次数