Tag: 系统调用

Linux c / c ++如何从ThreadID中查找PID

我目前正在编写一个应该实现基于进程的访问权限的FUSE应用程序。 我现在偶然发现,FUSE只提供ThreadID,而不是ProcessID。 现在我需要找到不同进程的给定线程ID的PID(或线程组ID)。 我注意到proc fs提供了基于线程的信息(即使ls / proc没有显示任何PID TID,它们仍然可以通过/ proc / /访问)这样我可以问/ proc / / status关于Tgid,但由于我的FUSE应用程序每秒会提供数百个请求,我觉得这可能不是最好的方法。 有没有人知道这里使用的formsgettgid(tid)的系统调用或函数?

使用比libc更新的linux头文件构建

我想使用自Linux 3.14以来可用的新SCHED_DEADLINE调度策略编写程序。 我开始尝试使用sched_setattr函数的简单程序。 #include int main(void) { // struct sched_attr attr; // attr.size = sizeof(struct sched_attr); // attr.sched_policy = SCHED_DEADLINE; sched_setattr(0, (void*)0, 0); return 0; } 但是在编译时我收到以下错误: $gcc dead.c dead.c: In function ‘main’: dead.c:8:2: warning: implicit declaration of function ‘sched_setattr’ [-Wimplicit-function-declaration] sched_setattr(0, (void*)0, 0); ^~~~~~~~~~~~~ /tmp/ccGxWxZE.o: In function `main’: dead.c:(.text+0x19): undefined reference to `sched_setattr’ collect2: […]

c中的简单shell:waitpid系统调用无法正常工作

我必须创建简单的shell来读取命令并按顺序执行它们。 condition不会改变main函数的forms,而execute函数应该是递归的。 主要问题是,似乎waitpid不起作用。 但我知道,我的代码中存在很多问题。 请让我知道我应该从哪里开始.. #include #include #include #include #include #include #define MAX 10 char cmmd[MAX][256]; int sp; char *argv[10]; int size; void ClearLineFromReadBuffer(void){ while(getchar() != ‘\n’); } void printCommands(){ size = sp+1; //print by moving stack pointer while(1){ if (sp==-1) break; printf(“Command line : %s\n”, cmmd[sp]); sp–; } printf(“print end\n”); } void readCommandLines(){ int […]

为什么fork系统调用奇怪的行为?

int main(void) { printf(“abc”); fork(); return 0; } 此代码的输出是: abcabc 为什么打印两次,即使fork系统调用在printf语句之后? Ideone链接

df和statfs的输出不同

为什么df命令和statfs()系统调用值的输出不同: 调用statfs的程序: #include #include #include #include #include #include int main() { struct statfs vfs; if (statfs(“/”, & vfs) != 0) { fprintf(stderr, “%s: statfs failed: %s\n”, “/”, strerror(errno)); exit(0); } printf(“mounted on %s:\n”,”/”); printf(“\tf_bsize: %ld\n”, vfs.f_bsize); printf(“\tf_blocks: %ld\n”, vfs.f_blocks); printf(“\tf_bfree: %ld\n”, vfs.f_bfree); printf(“\tf_bavail: %ld\n”, vfs.f_bavail); printf(“\tf_files: %ld\n”, vfs.f_files); printf(“\tf_ffree: %ld\n”, vfs.f_ffree); return 0; } 输出: […]

C write call和Go syscall.Write之间的区别

syscall write返回-1并设置errno是一个简单的例子。 如果C write调用返回零或正数,我感兴趣的是errno的状态。 如果errno对于任何情况都不为零,则Go中的包装器syscall.Write只返回err ,其中还包括write调用返回正数的情况。 https://github.com/golang/go/blob/3cb64ea39e0d71fe2af554cbf4e99d14bc08d41b/src/syscall/zsyscall_linux_386.go#L1007 但是,如果我们编写零长度缓冲区而不解释任何细节,则C write调用的手册页大致描述了errno 也可能被设置但未指定。 因此,以下案例似乎不清楚: 如果write调用为文件,非阻塞套接字或阻塞套接字返回0,则errno的状态是什么? 何时以及如何write调用返回0并且errno不为0? 如果write调用返回正数,则errno的状态是什么? 它会消极吗? 有没有其他系统调用可能会遇到相同的情况? 我认为上面的描述指出了C write调用和Go syscall.Write之间的区别,这对开发人员来说还不清楚,以下是我的想法: 根据手册页,在C write调用文件和非阻塞套接字中明确定义了返回零,但是不清楚是否存在阻塞套接字的非错误条件,这会导致write()无阻塞,如果重试,则返回0,并且(可能)稍后可能成功。 确实Go直接包装系统调用write 。 但是,以下代码片段似乎不安全,因为written等于零的情况可能会触发err但我们不想破坏循环: func writeAll(fd int, buffer []byte) bool { length := len(buffer) for length > 0 { written, err := syscall.Write(fd, buffer) if err != nil { // here return false } length […]

munmap,mmap的function是什么?

当我尝试研究一些处理FPGA的代码时,我遇到了munmap,mmap。 我浏览了这里提供的手册。 我仍然不理解这个function的目的。 究竟是什么呢?

如何使用clone()使父进程和子进程同时运行?

我是linux的新手。 我想同时制作子进程和父进程。 但我失败了。 这是我的代码。 有谁能够帮我? #define _GNU_SOURCE #include #include #include #include #include #define FIBER_STACK 8192 void * stack; int do_something(){ int a = 0; while (a<10){ printf("pid : %d, a = %d\n", getpid(), a++); } exit(1); } int main() { void * stack; stack = malloc(FIBER_STACK); if(!stack) { printf("The stack failed\n"); exit(0); } int a […]

在C中显示正在运行的进程列表

你能建议我检查当前正在运行的进程的系统调用吗? (我必须写一个像顶部的C函数) 我试图读取proc/文件夹,但在我的情况下并不好。

在不知道返回类型的情况下将结构的成员初始化为函数指针

我有这个结构: typedef struct xyz_data { void *myfa; <——- correct void *myfb; <——- incorrect } 而这个function定义: asmlinkage ssize_t (*real_sys_read)(unsigned int fd, char __user *buf, size_t count); asmlinkage ssize_t hooked_sys_read(unsigned int fd, char __user *buf, size_t count); (正如你可能猜测的那样,这将指向内核的__NR_read )。 将*myfa;保存到*myfa; 就像xyz_data_something->myfa = hooked_sys_read一样简单,但myfb怎么样? 我不确定xyz_data_something->myfb = &real_sys_read是否有效。 我正在劫持一些系统调用(如果你对项目感兴趣,一切都在GitHub中可用),每个被劫持的系统调用都会使用该结构来调用它所属的真实系统调用(将通过*myfb访问),使用返回值。 请记住,每个系统调用都有自己的返回类型。