我在架构内的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»,但它存在.
如果我宣布:
int i = 0 + 'A';
Run Code Online (Sandbox Code Playgroud)
是'A'考虑char还是int?
有些人可能会使用:
int i = 0 + (int)'A';
Run Code Online (Sandbox Code Playgroud)
但这真的有必要吗?
几个月前,我写了一个用于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表示失败.
在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上正常工作?万一它使用堆为什么我不需要免费呢?
我正在创建一个文件句柄,以便在关闭时删除,并具有读取权限。我需要在不关闭句柄的情况下(因为它会删除文件)创建一个可以读取该文件的进程。
这是我的实现:我创建一个文件,在没有关闭的情况下尝试用记事本打开该文件,但它不能。我该如何解决这个问题。我想我可以成为 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)