Linux - 程序设计
文章平均质量分 81
森林公园
这个作者很懒,什么都没留下…
展开
-
Linux 编程,C 语言中的陷阱 - sizeof(字符串字面量)
目录sizeof 运算符 / C 语言字符串字面量(计算字符串字面量长度时,会计入字符串结尾的空字符 ‘\0’)1. sizeof 运算符C 语言中的 字符串字面量作为字符数组来处理当 C 语言编译器在程序中遇到长度为 n 的字符串字面量时,会为字符串字面量分配长度为 n + 1 的内存空间。这块内存空间将用来存储字符串字面量中的字符,以及一个用来标志字符串末尾的额外字符(空字符,...原创 2019-04-08 10:52:31 · 641 阅读 · 0 评论 -
Linux 内存管理
竟然可以手动分配内存!想想还有点小激动。目录内存操作函数(malloc / calloc / realloc / memcpy 等)demo(malloc 函数,简单内存分配)malloc 函数可以保证其返回的内存是地址对齐的(关于地址对齐),所以它可以被转换为任何类型的指针。demo(将结构体指针指向一块 ’精心安排的‘ 内存区域,并打印该结构体成员变量)#inclu...原创 2019-04-12 10:34:41 · 158 阅读 · 0 评论 -
问题:同一个进程中,先后对同一个文件描述符进行写入 / 读取 操作,读写指针的位置导致读取内容失败
文件‘读写指针’ / lseek 系统调用在进行文件操作(读 / 写)时,可以使用 lseek 系统调用来设置文件的下一个读写位置。当 多进程 / 多线程 环境中,对同一资源进行读 / 写操作时,很可能会 因为 ‘读写指针’ 的变化导致各种隐蔽的问题,这一点必须要仔细。lseek 系统调用(对文件描述符的读写指针进行设置,即可以用它来 设置文件的下一个读写位置)#include <...原创 2019-04-08 18:03:58 · 1156 阅读 · 1 评论 -
GCC 中的 aligned 和 packed 属性(关于地址对齐)
原文链接 - GCC 中的 aligned 和 packed 属性(关于地址对齐)x.转载 2019-04-12 10:51:45 · 2701 阅读 · 0 评论 -
Linux 信号(signal)
信号是 UNIX 和 Linux 系统响应某些条件而产生的一个事件。接收到该信号的进程会相应的采取一些行动。我们用术语 生成 表示一个信号的产生,使用术语 捕获 表示接收到一个信号。信号是由于某些错误条件而生成的,如 内存段冲突 / 浮点处理器错误 或 非法指令等。它们由 shell 和终端处理器生成来引起中断,它们还可以作为在 进程间传递消息 或 修改行为 的一种方式,明确地由一个进程发送给...原创 2019-04-09 15:37:52 · 409 阅读 · 0 评论 -
问题:Linux 信号处理,当连续给一个进程同时发送多个信号时,部分信号丢失而未得到处理
参考链接 - linux 信号signal和sigaction理解(该文章解释了:< 实验 1 中连续多个相同信号处理问题 >,以及 < 实验 2/3 中使用 sigaction 信号屏蔽字解决信号处理函数竞态问题 > )连续给一个进程发送多个相同信号时,部分信号丢失而未得到处理(使用 signal 函数处理信号),代码如下:/* test2.c */#inclu...原创 2019-04-09 15:35:34 · 3219 阅读 · 2 评论 -
Linux 进程信号屏蔽字 - 设置进程信号屏蔽字
在使用 sigaction 函数处理信号时,可以一并设置进程的信号屏蔽字。但是有单独的函数可以用来设置进程的信号屏蔽字:sigprocmask 函数。sigprocmask 函数#include <signal.h>int sigprocmask(int how, const sigset_t *set, sigset_t *oset);参数 how 的取值如下:...原创 2019-04-09 16:21:20 · 957 阅读 · 0 评论 -
Linux 套接字:简介(一)(?)
目录原创 2019-04-13 23:09:48 · 1299 阅读 · 0 评论 -
问题:C 语言结构体类型参数 与 结构体指针类型参数 的区别
结构体类型 参数传递的是结构中所有成员的副本。而 结构体指针类型 参数传递的是指向原结构体的指针。代码/* test3.c */#include <stdio.h>struct data { int i; char *msg;};void changeData1(struct data d); // 结构体类型参数void changeD...原创 2019-04-11 15:33:53 · 591 阅读 · 0 评论 -
Linux 编程中的错误处理
1. 头文件 <errno.h>( !errno 变量存在线程安全问题 !)标准库中的一些函数通过向 <errno.h> 中声明的 int 类型 errno 变量存储一个错误码(正整数)来表示有错误发生。假设我们需要使用一个库函数,该库函数通过给 errno 赋值来产生程序运行出错的信号。在调用这个函数之后,我们可以检查 errno 的值是否为零。如果不为零,则表示在...原创 2019-04-08 21:56:02 · 209 阅读 · 0 评论 -
Linux 错误码(error code)列表(头文件 ‘errno.h’)
参考链接 - What are the standard error codes in Linux?目录Ubuntu 中安装 ‘errno’ 命令使用 ‘errno -ls’ 命令,查看错误码错误码(error code)列表错误码列表生成程序1. Ubuntu 中安装 ‘errno’ 命令:ubuntu@cuname:~$ sudo apt-get install mor...原创 2019-04-08 15:56:00 · 4527 阅读 · 0 评论 -
Linux 线程
目录线程操作函数( pthread_create / pthread_join / pthread_exit)(C 与 Java 实现对比)(编译程序时需要用选项 ‘-pthread’ 来链接线程库)1. 线程操作函数(创建一个新的线程,C 语言 与 Java 对比)C 语言实现,代码如下:/* test1.c */#include <stdio.h>#in...原创 2019-04-10 17:02:48 · 181 阅读 · 0 评论 -
1.0 Linux文件系统
Linux(Unix)文件类型文件类型ls缩写应用常规文件-保存数据目录d存放文件符号链接l(小写的 ’L‘)指向其他文件字符设备节点c访问设备块设备节点b访问设备命名管道函数p进程间通信套接字s进程间通信硬链接与软链接...原创 2019-04-07 11:35:46 · 205 阅读 · 0 评论 -
2.0 Linux进程
进程状态(stat)STAT代码说明S睡眠。通常是在等待某个事件的发生,如一个信号或有输入可用R运行。严格说,是‘可运行’,即在运行队列中,处于正在执行或即将运行状态D不可中断的睡眠(等待)。通常是在等待输入或输出完成T停止。通常是被 shell 作业控制所停止,或者进程正处于调试器的控制之下Z死(Defunct)进程或僵尸(zombie)进...原创 2019-04-07 12:05:22 · 151 阅读 · 0 评论 -
数据结构:缓冲区/缓存简单实现
利用 取余运算 使得读/写指针在长度为 capacity 的连续内存空间上循环进行读/写操作(待加入:线程安全的读/写函数)目录头文件 buffer.h源文件 buffer.c1. 头文件 buffer.h/* buffer.h */#include <stdlib.h>#include <stdio.h>#include <errno.h&...原创 2019-04-12 17:34:34 · 2915 阅读 · 1 评论 -
2.1 Linux 启动新进程
启动新进程system 函数(使用 shell 启动新进程)exec 函数(替换进程映像,并未创建新的进程)fork 函数(复制进程映像,创建新进程,父子关系:原进程与新进程)1. system 函数(使用 shell 启动新进程)在一个程序的内部启动另一个程序,从而创建一个新进程。system 函数确实创建了一个新的进程,但是新进程和原进程之间没有父子关系!仅仅是用一个 sh...原创 2019-04-07 20:22:51 · 826 阅读 · 0 评论 -
2.2.1 进程管理,以及父子进程共享同一个文件资源时,文件的‘读写位置’会相互影响
目录等待一个进程(父进程等待子进程终止)僵尸进程(defunct / zombie)1. 等待一个进程当用 fork 函数调用启动一个子进程时,子进程就有了它自己的生命周期并将独立运行。可以通过在父进程中调用 wait 函数让父进程等待子进程结束。wait 函数#include <sys/types.h>#include <sys/wait.h>...原创 2019-04-08 18:36:07 · 1043 阅读 · 0 评论 -
Linux 信号常量表
目录原文链接 - Linux Signalsx(暂时使用图片代替)转载 2019-04-07 23:09:57 · 313 阅读 · 0 评论 -
Java中的多线程与锁(二)(锁的概念)
1. 关于锁锁的概念。锁用来起保护作用,控制对被保护对象的访问。对于一个线程来说,锁有 2 中状态,一种状态 ‘可进入’或‘可通过’,这种状态下锁对该线程没有副作用,线程继续执行,而另一种状态 ‘不可进入’或‘不可通过’,这种状态下,锁对该线程产生了约束,线程可能会立即返回或者进入等待状态,直到某个条件成立,使得该线程可以通过锁,而等待过程中,该线程也可能被外部中断唤醒。那么怎样理解:一...原创 2019-04-28 16:32:09 · 335 阅读 · 0 评论