运行可执行文件的默认配置文件,并调用该文件gmon.out.有没有办法指定新的位置?
我在i386/linux2.6上使用gcc 3.4.6
它在ftok()手册中提到过
key_t ftok(const char *pathname, int proj_id);
Run Code Online (Sandbox Code Playgroud)
ftok()函数使用由给定路径名命名的文件的标识(必须引用现有的可访问文件) ...
我很困惑const char *pathname.
它最好的做法是什么?在我当前的系统上,我可以通过"/home/Andrew/anyfile"但是我的程序必须运行的其他系统不可能拥有此文件.
我如何使用"/etc/hosts/"或"/etc/inittab"因为我确定所有这些系统都有这两个文件?这是个好主意吗?它会引起任何问题吗?
我不想要求用户在执行时输入文件名或将文件名作为命令行参数传递.
还有其他不同的更好的方法来决定pathname吗?
哪种方式最好,最可靠?
谢谢你的时间.
我从main()创建了超过100个线程所以我只想知道在退出main()之前需要调用pthread_join().此外,我不需要这些线程生成的数据,基本上所有线程都在做一些独立于main()和其他线程的工作.
我对指针和它们占用的字节有点困惑.在我的教科书中,它首先说明16位系统上的指针占用2个字节,32位系统占用4个字节,64位系统占用8个字节,依此类推.然后是10行,它表示指针占用了许多字节,这是保存地址所需的.这是我的问题:
我正在尝试使用交叉编译器(GCC 4.9.2)进行以下简单的"Hello World"程序编译mips:
#include <stdio.h>
int main()
{
int x = 5;
printf("x = %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)
该x变量用于阻止GCC更改printf为puts,它似乎自动为一个简单的换行终止字符串.
我已经构建了一个交叉编译器${HOME}/xc并使用以下命令执行它:
${HOME}/xc/bin/mips-gcc -v hello.c
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
/tmp/ccW5mHJu.o: In function `main':
(.text+0x24): undefined reference to `printf'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我假设这是链接器的一个问题,因为我希望该进程先前失败,例如stdio.h在搜索路径上找不到.我可以编译一个简单的程序,只返回零,所以不是整个工具链被破坏的情况,大概只是标准的库链接(我使用的是newlib 2.2.0-1).
无论我是在Linux(Ubuntu 14.10)还是Cygwin(Windows 8)下运行交叉编译器,我都会得到同样的错误.
海湾合作委员会的全部产出是:
Using built-in specs.
COLLECT_GCC=/home/paul/xc/bin/mips-gcc
COLLECT_LTO_WRAPPER=/home/paul/xc/libexec/gcc/mips/4.9.2/lto-wrapper
Target: mips
Configured with: /home/paul/xc/mips/tmp/gcc-4.9.2/configure --prefix=/home/paul/xc --target=mips --enable-languages=c --with-newlib --without-isl --without-cloogs --disable-threads --disable-libssp --disable-libgomp --disable-libmudflap
Thread model: single …Run Code Online (Sandbox Code Playgroud) 我试图将两个参数传递给C中的一个线程.我创建了一个数组(大小为2),并试图将该数组传递给线程.这是将多个参数传递给线程的正确方法吗?
// parameters of input. These are two random numbers
int track_no = rand()%15; // getting the track number for the thread
int number = rand()%20 + 1; // this represents the work that needs to be done
int *parameters[2];
parameters[0]=track_no;
parameters[1]=number;
// the thread is created here
pthread_t server_thread;
int server_thread_status;
//somehow pass two parameters into the thread
server_thread_status = pthread_create(&server_thread, NULL, disk_access, parameters);
Run Code Online (Sandbox Code Playgroud) 我正在使用一个使用DirectX的C项目,但我遇到了一个问题.某些DX调用需要一个IID对象,通常用__uuidof.这需要做的一件事是创建一个RenderTargetView.DirectX示例/教程执行此操作:
ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );
Run Code Online (Sandbox Code Playgroud)
当我尝试调用__uuidof我的C代码时,我收到编译器错误:Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C.DirectX有一个C接口,所以我想必须有办法做到这一点,但我不知道它会是什么.谁知道?
我在C中有这个代码,它接受了一堆chars
#include<stdio.h>
# define NEWLINE '\n'
int main()
{
char c;
char str[6];
int i = 0;
while( ((c = getchar()) != NEWLINE))
{
str[i] = c;
++i;
printf("%d\n", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入是:testtesttest
输出:1 2 3 4 5 6 7 8 117 118 119 120
我的问题是:
虽然我明显超出了阵列的容量,为什么我不会出现超出界限(分段错误)的异常?
为什么输出中的数字会突然跳到很大的数字?
我在C++中试过这个并且得到了相同的行为.请问有谁可以解释一下这是什么原因?
我正在阅读Pointer Arithmetic中的一些内容,我遇到了两件我无法理解的事情,也不知道它的用途
address_expression - address_expression
Run Code Online (Sandbox Code Playgroud)
并且
address_expression > address_expression
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下,它们是如何工作的以及何时使用它们.
编辑:
我想说的是,如果我只取两个地址并减去它们,它们会产生什么
如果我拿两个地址并比较它们的结果或基于的比较
编辑:我现在明白了减去地址的结果,但比较地址我仍然没有得到它.
我理解1 <2,但是地址如何比另一个更大,他们在比较什么