Questions tagged «c»

C是用于操作系统,游戏和其他高性能工作的通用计算机编程语言,与C ++明显不同。它由Dennis Ritchie于1972年开发,用于Unix操作系统。

4
为什么FreeBSD不赞成使用GCC而赞成Clang / LLVM?
所以我在网上逛逛,偶然发现了这篇文章。从根本上说,从版本10及更高版本开始,FreeBSD将弃用GCC,而推荐使用Clang / LLVM。 从到目前为止我在网上看到的内容来看,Clang / LLVM是一个相当雄心勃勃的项目,但是就可靠性而言,它不能与GCC相匹配。 FreeBSD选择LLVM作为其编译器基础结构是否有任何技术原因,还是整个事情归结为永恒的GNU / GPL与BSD许可? 这个问题(以某种方式)具有有关FreeBSD中GCC用法的相关信息。
241 freebsd  compiling  gcc  c  llvm 

10
argv为什么要包含程序名称?
典型的Unix / Linux程序接受命令行输入作为参数计数(int argc)和参数向量(char *argv[])。的第一个元素argv是程序名称-后面是实际参数。 为什么将程序名称作为参数传递给可执行文件?是否有使用自己的名称的程序示例(可能是某种exec情况)?

7
线程是否在Linux上实现为进程?
我正在阅读 Mark Mitchell,Jeffrey Oldham和Alex Samuel 所著的 Advanced Linux Programming。是2001年的,所以有点旧了。但是无论如何我都觉得很好。 但是,当它与Linux在shell输出中产生的结果有所不同时,我到了一个地步。在第92页(查看器中为116)上,第4.5章GNU / Linux线程实现始于包含以下语句的段落: GNU / Linux上的POSIX线程实现与其他许多类UNIX系统上的线程实现有一个重要的区别:在GNU / Linux上,线程被实现为进程。 这似乎是关键点,以后将用C代码进行说明。本书的输出为: main thread pid is 14608 child thread pid is 14610 在我的Ubuntu 16.04中是: main thread pid is 3615 child thread pid is 3615 ps 输出支持这一点。 我猜在2001年到现在之间一定有所改变。 下一页的下一个子章节4.5.1 Signal Handling建立在上一条语句的基础上: 信号和线程之间的交互行为在一个类UNIX系统之间有所不同。在GNU / Linux中,行为是由将线程实现为进程这一事实所决定的。 看起来这在本书的后面将变得更加重要。有人可以解释这是怎么回事吗? …

4
为什么带有fork()的程序有时会多次输出其输出?
在程序1中Hello world仅被打印一次,但是当我删除 \n并运行它(程序2)时,输出被打印8次。有人可以给我解释一下\n这里的意义以及它如何影响fork()吗? 程序1 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world...\n"); fork(); fork(); fork(); } 输出1: hello world... 程序2 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world..."); fork(); fork(); fork(); } 输出2: hello world... hello world...hello world...hello world...hello world...hello …
50 c  fork 

6
我的系统使用什么C库版本?
如何确定系统使用的userland C库?需要此信息的可能原因包括: 我正在考虑下载一个巨大的源程序包,我相信它将进行适当的检查并列出一个最小的库版本,但是我宁愿先检查一下是否可以工作,以免自己陷入麻烦。 我担心我要尝试在系统的程序包管理系统外部安装的某些第三方二进制文件的ABI兼容性。 我有一个源软件包,其文档中提到需要最低版本的系统库,但是构建过程不会执行任何检查。 我正在构建针对特定系统的交叉编译器,并且不想冒前向兼容性问题的风险。

5
如何使用用户的UID杀死所有用户的进程
我想从Linux系统上的Shell脚本或本机代码中杀死特定用户的所有正在运行的进程。 我是否必须阅读/ proc目录并查找这些目录? 有任何想法吗?Linux中的UID下是否有pid的动态映射?这不是proc中的吗? 如果没有,那么此列表在哪里维护?我应该阅读吗?另外,系统中所有UID的静态列表在哪里,以便我可以验证此用户的存在,然后继续杀死在该用户下运行的所有进程?
41 c  linux  proc 

6
如何将二进制文件转储为C / C ++字符串文字?
我有一个二进制文件,希望将其包含在C源代码中(出于测试目的),因此我想以C字符串的形式获取文件内容,如下所示: \x01\x02\x03\x04 是否可以使用od或hexdump实用程序?虽然不是必须的,但是如果字符串可以每16个输入字节换行到下一行,并且在每行的开头和结尾都包含双引号,那会更好! 我知道该字符串将具有嵌入的null(\x00),因此我将需要在代码中指定该字符串的长度,以防止这些字节尽早终止该字符串。
39 c  hexdump  xxd 


2
pthread的默认堆栈大小
据我了解,Linux上pthread的默认堆栈大小为16K。我在64位Ubuntu安装上得到了奇怪的结果。 $ ulimit -s 8192 也: pthread_attr_init(&attr); pthread_attr_getstacksize(&attr, &stacksize); printf("Thread stack size = %d bytes \n", stacksize); Prints Thread stack size = 8388608 bytes 我非常确定堆栈大小不是“ 8388608”。有什么事吗
24 c  multithreading 

3
fork()中的写时复制如何处理多个fork?
根据维基百科(可能是错误的) 发出fork()系统调用时,将创建与父进程对应的所有页面的副本,并由OS加载到子进程的单独内存位置。但这在某些情况下是不需要的。请考虑以下情况:孩子执行exec系统调用(用于从C程序中执行任何可执行文件)或在以后很快退出fork()。当仅需要子进程来执行父进程的命令时,就不需要复制父进程的页面,因为exec用要执行的命令替换了调用它的进程的地址空间。 在这种情况下,将使用一种称为写时复制(COW)的技术。使用此技术时,发生派生时,不会为子进程复制父进程的页面。而是在子进程和父进程之间共享页面。每当进程(父级或子级)修改页面时,都会为执行修改的那个进程(父级或子级)单独制作该页面的单独副本。然后,此过程将使用新复制的页面,而不是将来所有引用中的共享页面。另一个过程(未修改共享页面的过程)继续使用页面的原始副本(现在不再共享)。此技术称为写时复制,因为在某些进程向页面写入内容时会对其进行复制。 似乎当任何一个进程试图将其写入页面时,都会分配该页面的新副本并将其分配给产生页面错误的进程。之后原始页面将被标记为可写。 我的问题是:如果fork()在任何进程尝试写入共享页面之前多次调用gets ,会发生什么?
23 linux  c  fork 

2
POSIX是否保证任何标准实用程序的路径?
从C语言开始,运行标准实用程序(例如ps)而没有其他方法的最简单方法是什么? POSIX是否保证例如已存在标准ps,/bin/ps还是应该将PATH环境变量重置为所获得的内容confstr(_CS_PATH, pathbuf, n);,然后通过PATH搜索运行该实用程序?
22 path  c  posix  exec 

4
制作日志文件
有什么方法可以通过一些库函数或Linux中用C语言进行的系统调用来制作用于维护/ var / log /中的某些数据的日志文件。我还想知道编写和处理日志时应遵循的标准。谢谢
22 linux  logs  c  syslog 

4
在fork()之后,孩子将从哪里开始执行?
我正在尝试学习UNIX编程,并且遇到了有关fork()的问题。我知道fork()创建的进程与当前正在运行的进程相同,但是它从哪里开始?例如,如果我有代码 int main (int argc, char **argv) { int retval; printf ("This is most definitely the parent process\n"); fflush (stdout); retval = fork (); printf ("Which process printed this?\n"); return (EXIT_SUCCESS); } 输出为: 这绝对是父进程, 哪个进程打印了此文件? 哪个过程印出了这个? 我以为会fork()创建一个相同的过程,所以我最初认为在该程序中,该fork()调用将被永久递归调用。我猜是从通话fork()后开始创建的新流程fork()? 如果我添加以下代码,以区分父进程和子进程, if (child_pid = fork ()) printf ("This is the parent, child pid …
22 process  c  fork  api 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.