标签: linux

如何在gcc内联汇编中使用全局变量

我试图使用这样的内联汇编,作为全局变量,但编译器通过对saved_sp的未定义引用给出错误.

__asm__ __volatile__ (
        "movq saved_sp, %rsp\n\t" );
Run Code Online (Sandbox Code Playgroud)

saved_sp被声明为static long saved_sp全局(对于一个文件).我在这做什么错?

c linux assembly gcc inline-assembly

8
推荐指数
2
解决办法
5433
查看次数

如何为关闭的套接字捕获信号(`SIGPIPE`)?

我编写了一个服务器,它接受辅助端口上的套接字连接,以便传输通常发送的调试信息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)

sockets linux stdio

8
推荐指数
1
解决办法
1万
查看次数

基于时间戳的grep文件

这应该很简单,但我不知道它.我在Linux下拥有超过4GB的大型代码库.在构建期间生成一些头文件和xml文件(使用gnu make).如果重要,头文件是基于xml文件生成的.

我想在头文件中搜索一个关键字,该关键字是在时间实例(我的开始编译时间)之后最后修改的,以及类似的xml文件,但是单独的grep查询.

如果我在所有可能的头文件或xml文件上运行它,则需要花费很多时间.只有那些自动生成的.此外,搜索必须是递归的,因为有很多目录和子目录.

linux ubuntu grep

8
推荐指数
2
解决办法
4万
查看次数

什么决定了getdents返回的订单目录条目?

背景是我有一个列出目录条目的现有应用程序; strace显示它只是调用getdents并按返回的顺序列出它们.我希望它们以与没有参数的ls调用相同的顺序显示.是否有可能以某种方式更新目录数据来实现这一目标?

FS是ext4,如果这有任何区别的话.

谢谢

linux system-calls

8
推荐指数
1
解决办法
2157
查看次数

g ++ 4.6.1编译器错误:错误:未知伪操作:`.cfi_personality'

我有一个文件,使用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)

c++ linux compiler-construction assembly

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

gdb如何显示线程名称

我的应用程序中创建了许多线程.当我执行命令'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)

c linux gdb pthreads

8
推荐指数
3
解决办法
8981
查看次数

任何想法为什么我的C代码无法从/ proc读取?

我已经能够编写一个程序,可以读取任何文本文件...除了在/ 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)

c unix linux

8
推荐指数
2
解决办法
6781
查看次数

mysql导出后找不到文件

我需要将数据从表导出到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)

我的档案在哪里?

php mysql linux cron export-to-csv

8
推荐指数
1
解决办法
751
查看次数

如何使用ffmpeg将m4v和wmv视频转换为mp4格式?

我在我的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)

我该如何解决这个问题?

linux ffmpeg

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

callgrind缓慢关闭仪表

我正在使用callgrind来配置一个Linux多线程应用程序,而且大多数它工作得很好.我用仪表关闭(--instr-atstart = no)启动它,然后一旦设置完成,我用callgrind_control -i打开它.但是,当我更改某些配置以尝试分析应用程序的不同部分时,它甚至在我开启仪器之前就开始运行得非常慢.基本上,部分代码需要几秒钟才能正常运行,需要花费一个多小时的时间来调用callgrind(关闭仪器).关于为什么会这样以及如何调试/解决缓慢的任何想法?

c++ linux profiling valgrind callgrind

8
推荐指数
1
解决办法
1870
查看次数