linux c 编程 ------ 常见函数

fork():创建一个进程

exec():停止当前进程中程序的执行,让当前进程执行另一个程序

access():查看是否有操作文件的权限,可以用来判断一个文件是否存在

pipe():无名管道,用在父子进程间通信

mkfifo():有名管道,用在进程间通信

消息队列:进程间通信

 

 

 

结构体成员A的结构体首地址  container_of(结构体成员A的指针, 结构体类型, 结构体成员A) 

复制代码
#include <stdio.h>
#include <linux/kernel.h>
struct student {
        char name[20];
        char sex;
};
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
        const typeof( ((type *)0)->member ) *__mptr = (ptr); \
        (type *)( (char *)__mptr - offsetof(type,member) );})
int main()
{
        struct student st={"zhangsan",'m'};
        struct student *tmp;
        char *ptr_name=st.name;
        tmp=container_of(ptr_name,struct student,name);
        printf("tmp->name=%s\n",tmp->name);
        printf("tmp->sex=%c\n",tmp->sex);
        return 0;
}
复制代码

 

 

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: 

int ioctl(int fd, ind cmd, …); 
    其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。 

 

posted @   流水灯  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2017-03-25 ES6 --- ECMAScript 6
点击右上角即可分享
微信分享提示