标签: system-calls

C中的睡眠功能

我知道这是一个简单的问题,但我仍然很困难,无法弄明白.有人能帮我吗?

char buf1[] = "one second program started\n";
char buf2[] = "one second program end\n";

int main(void)
{
 write(1,buf1,100);
 sleep(1);
 write(1,buf2,100);
}
Run Code Online (Sandbox Code Playgroud)

我需要打印第一个语句,然后在单元等待之后,打印第二个语句.但是,当我执行它时,两个语句都打印出来,然后单元等待,第二个语句打印两次.我哪里错了?

c sleep system-calls

0
推荐指数
2
解决办法
411
查看次数

成功写入不会在文件上写入任何内容

首先抱歉,如果这是一个愚蠢的问题(肯定是这样),但我真的很擅长在Unix中使用Syscall.我试图用"写"在文件上写东西; 它正确地创建了文件,但没有写任何内容,这就是代码:

int main(void) {
   int fd;
   char *string = "Test";
   if(fd=open("home/user/test.txt", O_WRONLY | O_APPEND | O_CREAT)==-1){
    perror("Open failed");

   }
   printf("%d\n", strlen(string));
   printf("Wrote %d byte on the file", write(fd,string,strlen(string)));
   close(fd);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪里是我的问题?谢谢

c unix linux file system-calls

0
推荐指数
1
解决办法
277
查看次数

如何将系统调用输出重定向到字符串

可能重复:
管道子进程标准输出到变量

我正在运行python程序:

import os
os.system("ls") # ls command runs on the terminal 
Run Code Online (Sandbox Code Playgroud)

要将输出存储在文件中:

os.system("ls > a.txt")
Run Code Online (Sandbox Code Playgroud)

我需要的是,它将输出存储在一些临时字符串中.那可能吗 ??

python unix system-calls

0
推荐指数
1
解决办法
3917
查看次数

当我打印在用户空间中初始化的char*时会发生什么?

我实施了一个新的系统调用作为介绍练习.它只需要一个缓冲区和printk缓冲区.我后来才知道正确的做法是使用copy_from_user.

这只是一个验证地址的预防措施,还是我的系统调用导致一些我看不到的错误(页面错误?)?

如果只是一种预防措施,它有什么保护作用?

谢谢!

kernel system-calls linux-kernel printk

0
推荐指数
1
解决办法
434
查看次数

2个或更多fork系统调用如何工作?

这是一个代码,我一个接一个地使用2个fork()系统调用 - 它是如何实际工作的?

 #include <unistd.h>
 #include <iostream.h>
 using namespace std;

 int main()
 {
    cout << "0. I am process " << getpid() << endl;
    (void) fork();
    cout << "1. I am process " << getpid() << endl;
    (void) fork();
    cout << "2. I am process " << getpid() << endl;
}
Run Code Online (Sandbox Code Playgroud)

我得到输出为:
0.我是过程27701
1. 我是过程25915 1.我是
过程27701
2.我是过程27781
2.我是过程26170
2.我是过程27701

这是我使用3个fork系统调用的下一个程序,如何获得这样的输出?如果我手动解决这个代码,逻辑是什么?

#include <unistd.h>
#include <iostream>
using namespace std;

int main()
{
    cout << "0. I am process " << getpid() …
Run Code Online (Sandbox Code Playgroud)

unix linux fork system-calls

0
推荐指数
1
解决办法
2621
查看次数

如何在awk中使用stat命令

我想在awk中使用stat命令来实现列出文件的修改时间(以秒为单位).我想将stat中的输出信息保存在变量中,并在awk中进一步处理.如何格式化命令来实现这个目标?

ls -la | awk '{ system("a=$(stat -c %Y $9)");    (further operation on a...)  }'
Run Code Online (Sandbox Code Playgroud)

提前致谢

多米尼克

bash awk system-calls stat

0
推荐指数
1
解决办法
2045
查看次数

信号系统调用

我有这个代码片段,我甚至读了几次信号系统调用,我仍然不明白为什么程序停止第四次我按CTRL-C,而不是第三次.提前致谢!

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int i=0;

void handler(int sig)
{
    i++;
    printf("CTRL-C\n");
    if (i==3)
        signal(SIGINT, SIG_DFL);
}

int main()
{
    signal(SIGINT,handler);
    while (1)
    {
        printf("Hello world!\n");
        sleep(1);
    }

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

我读到信号系统调用不可移植,所以如果我提到我使用的是最新版本的Ubuntu(14.04),它可能会有所帮助.

c linux signals system-calls handler

0
推荐指数
1
解决办法
133
查看次数

解决mprotect()系统调用失败

我正在编写一些ROP漏洞利用代码,通过系统调用调用mprotect,调用int 0x80后eax设置为0x0表示成功.将执行转移到目标地址仍会产生SIGSEGV.我希望有人能告诉我哪里出错了.

一些细节,目标地址是.data部分,这是我将通过shellcode编写的地方: [20] 0x8146820->0x814c2b8 at 0x000fd820: .data ALLOC LOAD DATA HAS_CONTENTS

我设置eax125,ebx页面边界0x8146000,ecx0x1000(4096页大小),并edx0x7(RWX).

就在系统调用之前,寄存器看起来像这样:

eax            0x7d 125
ecx            0x1000   4096
edx            0x7  7
ebx            0x8146000    135553024
esp            0xbffff2b0   0xbffff2b0
ebp            0x8d0e0f0    0x8d0e0f0
esi            0x804fb85    134544261
edi            0x43434343   1128481603
eip            0x80c0182    0x80c0182 <mprotect+18>
eflags         0x202    [ IF ]
cs             0x73 115
ss             0x7b 123
ds             0x7b 123
es             0x7b 123
fs             0x0  0
gs             0x33 …
Run Code Online (Sandbox Code Playgroud)

linux assembly exploit system-calls mprotect

0
推荐指数
1
解决办法
1166
查看次数

如何使用C++更改Linux中文件的权限

我想在Linux中用C++更改文件的权限.用户必须使用以下语法输入权限:"请在终端中输入权限:rwx-wr--".

谢谢你的帮助.

c++ linux permissions system-calls

0
推荐指数
1
解决办法
4500
查看次数

如何从C/C++应用程序进行Linux系统调用,而不使用汇编,并且以独立于CPU的方式?

我期待编写一个程序,需要对进程进行低级别的工作(即使用fork系统调用等).该程序用C++编写,只能在Linux上运行.理想情况下,这将是整个CPU架构(即86,x86_64和ARM)与只不过是重新编译更便携,但我只真正需要x86_64的支持.

由于每个Linux系统调用都需要许多参数并在cpu寄存器中返回许多参数(通常只有1个返回值),因此每个系统调用的C函数包装器很容易实现.另外,因为AFAIK,在内核中实现的系统调用具有相同的参数和返回值,如果是不同的汇编级实现,则可以公开相同的C接口.

这样的事情存在吗?如果是这样,我该如何访问它?

它的文档在哪里(可用函数列表,它们的解释参数以及函数的确切解释)?

c c++ linux assembly system-calls

0
推荐指数
1
解决办法
785
查看次数

标签 统计

system-calls ×10

linux ×6

c ×4

unix ×3

assembly ×2

c++ ×2

awk ×1

bash ×1

exploit ×1

file ×1

fork ×1

handler ×1

kernel ×1

linux-kernel ×1

mprotect ×1

permissions ×1

printk ×1

python ×1

signals ×1

sleep ×1

stat ×1