我试图使用这样的内联汇编,作为全局变量,但编译器通过对saved_sp的未定义引用给出错误.
__asm__ __volatile__ (
"movq saved_sp, %rsp\n\t" );
Run Code Online (Sandbox Code Playgroud)
saved_sp被声明为static long saved_sp全局(对于一个文件).我在这做什么错?
我编写了一个服务器,它接受辅助端口上的套接字连接,以便传输通常发送的调试信息stderr.这个第二个端口 - 一个错误服务端口 - 一次只能有一个连接,这很方便,因为它允许我stderr使用一个dup2(2)调用重定向.(请参阅我是否可以将父进程的stderr重定向到分叉进程上的套接字文件描述符?).
以下代码在各方面都近乎令人满意.当客户端登录到端口时,stderr流将定向到套接字.当另一个客户端登录时,流再次被重定向,并且第一个客户端停止接收:完全令人满意.
在设计不足的情况下,当客户端关闭连接时,服务器崩溃,因为它正在尝试write()关闭的套接字.
我有一个正常的子进程的基本信号处理程序,但我不知道如何在错误套接字关闭时处理来自父进程的特定信号.
如何捕获ERR_PORT_NUM上的连接已关闭并让信号处理程序重新打开(或dup)stderr以/dev/null备下一个等待错误客户端的信号(在父级中)?
另外,当第二个连接时,我应该如何处理原始错误客户端连接?目前第一个客户是悬空.即使非正常关闭第一个连接也是可以接受的.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <errno.h>
#include <pwd.h>
#include <signal.h>
#include <netinet/in.h>
#include <sys/mman.h>
#define PORT_NUM 12345
#define ERR_PORT_NUM 54321
static void child_handler(int signum)
{
switch (signum) {
case SIGALRM:
exit(EXIT_FAILURE);
break;
case SIGUSR1:
exit(EXIT_SUCCESS);
break;
case SIGCHLD:
exit(EXIT_FAILURE);
break;
}
} …Run Code Online (Sandbox Code Playgroud) 这应该很简单,但我不知道它.我在Linux下拥有超过4GB的大型代码库.在构建期间生成一些头文件和xml文件(使用gnu make).如果重要,头文件是基于xml文件生成的.
我想在头文件中搜索一个关键字,该关键字是在时间实例(我的开始编译时间)之后最后修改的,以及类似的xml文件,但是单独的grep查询.
如果我在所有可能的头文件或xml文件上运行它,则需要花费很多时间.只有那些自动生成的.此外,搜索必须是递归的,因为有很多目录和子目录.
背景是我有一个列出目录条目的现有应用程序; strace显示它只是调用getdents并按返回的顺序列出它们.我希望它们以与没有参数的ls调用相同的顺序显示.是否有可能以某种方式更新目录数据来实现这一目标?
FS是ext4,如果这有任何区别的话.
谢谢
我有一个文件,使用g ++(4.6.1)在运行osx(雪豹)的macbook pro上编译没有错误或警告.我刚刚将它上传到我们的linux集群(不是由我运行)并尝试在那里编译(也使用gcc 4.6.1).这次我和汇编程序有很多奇怪的错误信息.如何解释以下错误?
g++ -I../shared/boost_1_47_0 -std=c++0x -O2 -c ../shared/ft.cpp -o ../shared/ft.o
/tmp/ccEqihNa.s: Assembler messages:
/tmp/ccEqihNa.s:809: Error: unknown pseudo-op: `.cfi_personality'
/tmp/ccEqihNa.s:810: Error: unknown pseudo-op: `.cfi_lsda'
/tmp/ccEqihNa.s:1055: Error: unknown pseudo-op: `.cfi_personality'
/tmp/ccEqihNa.s:1056: Error: unknown pseudo-op: `.cfi_lsda'
:145: Error: unknown pseudo-op: `.cfi_personality'
:146: Error: unknown pseudo-op: `.cfi_lsda'
:248: Error: unknown pseudo-op: `.cfi_personality'
:249: Error: unknown pseudo-op: `.cfi_lsda'
:351: Error: unknown pseudo-op: `.cfi_personality'
:352: Error: unknown pseudo-op: `.cfi_lsda'
:496: Error: unknown pseudo-op: `.cfi_personality'
:497: Error: unknown pseudo-op: `.cfi_lsda'
:988: Error: unknown pseudo-op: `.cfi_personality' …Run Code Online (Sandbox Code Playgroud) 我的应用程序中创建了许多线程.当我执行命令'info threads'时,某些线程名称在gdb中可见,其他线程名称不显示.如何获取所有线程名称本身而不是像0xb7fe1424这样的十六进制值
4 Thread 0xb68ffb70 (LWP 18377) 0xb7fe1424 in __kernel_vsyscall ()
* 3 Thread 0xb7291b70 (LWP 18375) JKMainT (arg=0x0) at mylib.cpp:482
2 Thread 0xb7a92b70 (LWP 18374) 0xb7fe1424 in __kernel_vsyscall ()
1 Thread 0xb7a94730 (LWP 18371) 0xb7fe1424 in __kernel_vsyscall ()
Run Code Online (Sandbox Code Playgroud) 我已经能够编写一个程序,可以读取任何文本文件...除了在/ proc中找到的文件.我尝试从/ proc读取的任何文件都显示为空.
但每当我打字
cat /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
在终端上,我看到了我的CPU信息.
当我用文本编辑器(例如gedit或leafpad)打开它时,我也可以看到该文件.
所以似乎/ proc文件确实是文本文件,但我的C程序很难读取它们.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char* readFileString( char* loc ) {
char *fileDat;
FILE * pFile;
long lsize;
pFile = fopen( loc, "r" );
// Grab the file size.
fseek(pFile, 0L, SEEK_END);
lsize = ftell( pFile );
fseek(pFile, 0L, SEEK_SET);
fileDat = calloc( lsize + 1, sizeof(char) );
fread( fileDat, 1, lsize, pFile );
return fileDat;
}
int main( void ) {
char *cpuInfo;
cpuInfo = readFileString( …Run Code Online (Sandbox Code Playgroud) 我需要将数据从表导出到csv.我有以下结构(不是我的表,但出于演示目的)
CREATE TABLE `mytable` (
`id` int(11) DEFAULT NULL,
`mycolumn` varchar(25) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
数据(约3000条记录).现在我想导出一些这些记录(从我通过cronjob运行的脚本)
SELECT * INTO OUTFILE '/tmp/mytable.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable;
Run Code Online (Sandbox Code Playgroud)
表明:
Query OK, 3 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
然后我做:
ls: cannot access /tmp/mytable.sql: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我的档案在哪里?
我在我的PHPMotion项目中使用ffmpeg将视频转换为mp4.我无法将wmv和m4v视频转换为mp4格式.我已经粘贴了用于转换wmv和m4v的命令:
ffmpeg -i 1.wmv -ab 128 -b 1200 test.mp4
ffmpeg -i 1.m4v -ab 128 -b 1200 test.mp4
Run Code Online (Sandbox Code Playgroud)
当我使用此代码时,我收到一条错误消息:
Output #0, mp4, to 'test.mp4':
Stream #0.0: Video: mpeg4, yuv420p, 640x360, q=2-31, 1 kb/s, 90k tbn, 24 tbc
Stream #0.1: Audio: 0x0000, 44100 Hz, stereo, s16, 0 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Unsupported codec for output stream #0.1
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我正在使用callgrind来配置一个Linux多线程应用程序,而且大多数它工作得很好.我用仪表关闭(--instr-atstart = no)启动它,然后一旦设置完成,我用callgrind_control -i打开它.但是,当我更改某些配置以尝试分析应用程序的不同部分时,它甚至在我开启仪器之前就开始运行得非常慢.基本上,部分代码需要几秒钟才能正常运行,需要花费一个多小时的时间来调用callgrind(关闭仪器).关于为什么会这样以及如何调试/解决缓慢的任何想法?