linux write失败,怎么打印错误码

时间: 2023-10-02 12:08:18 浏览: 130
在Linux中,可以使用perror函数打印错误码。具体方法如下: 1. 在程序中包含<errno.h>头文件。 2. 在write调用后,判断其返回值是否小于0。 3. 如果小于0,使用perror函数打印错误信息和错误码。 示例代码如下: ``` #include <stdio.h> #include <errno.h> #include <unistd.h> int main() { char buf[] = "Hello, world!"; ssize_t ret = write(STDOUT_FILENO, buf, sizeof(buf)); if (ret < 0) { perror("write error"); } return 0; } ``` 在执行该程序时,如果write失败,会输出类似如下的错误信息: ``` write error: Bad file descriptor ``` 其中,"Bad file descriptor"就是错误信息,而错误码则会在该信息之前打印出来。
相关问题

regmap_raw_write()

regmap_raw_write() 是 regmap 框架中用于直接向寄存器写入原始数据的函数。其函数原型如下: ``` int regmap_raw_write(struct regmap *map, unsigned int reg, const void *val, size_t val_len); ``` 其中,map 是一个指向 regmap 结构体的指针,reg 是要写入的寄存器地址,val 是一个指向要写入的数据的指针,val_len 是要写入的数据长度。 下面是一个示例,演示如何使用 regmap_raw_write() 函数向 I2C 设备的寄存器写入数据: ``` #include <linux/regmap.h> #include <linux/i2c.h> #include <linux/i2c-dev.h> int write_i2c_reg(struct regmap *map, u8 reg, u8 *data, u8 len) { int ret; ret = regmap_raw_write(map, reg, data, len); if (ret < 0) { dev_err(map->dev, "Failed to write to I2C device\n"); return ret; } return 0; } int probe(struct i2c_client *client) { struct regmap_config config = { .reg_bits = 8, .val_bits = 8, .max_register = 0xff, .write_flag_mask = 0x80, .cache_type = REGCACHE_NONE, }; struct regmap *map; int ret; u8 data[2] = {0xAA, 0xBB}; map = devm_regmap_init_i2c(client, &config); if (IS_ERR(map)) { ret = PTR_ERR(map); dev_err(&client->dev, "Failed to initialize regmap: %d\n", ret); return ret; } ret = write_i2c_reg(map, 0x12, data, 2); if (ret) { dev_err(&client->dev, "Failed to write register\n"); return ret; } return 0; } ``` 在此示例中,probe() 函数使用 devm_regmap_init_i2c() 函数初始化一个 regmap 结构体,然后调用 write_i2c_reg() 函数向指定寄存器写入数据。write_i2c_reg() 函数通过调用 regmap_raw_write() 函数来实现,其中,map 是一个指向 regmap 结构体的指针,reg 是要写入的寄存器地址,data 是一个指向要写入的数据的指针,len 是要写入的数据长度。如果写入操作失败,则函数会返回错误码。

linux环境 mkfifo函数

在 Linux 环境中,`mkfifo()` 函数用于创建一个命名管道。命名管道是一种特殊的文件,用于实现进程间通信。它与普通文件的区别在于,它的数据只能被读取一次,读取后就被删除,不能被重复读取。 `mkfifo()` 函数的原型如下: ```c #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); ``` 其中,`pathname` 参数是要创建的命名管道的路径名;`mode` 参数是文件权限,它指定了文件的访问权限和所有权等信息。 `mkfifo()` 函数成功返回 0,失败返回 -1,并设置相应的错误码。创建成功后,可以使用 `open()` 函数打开该命名管道进行读写操作,使用 `unlink()` 函数删除该文件。 下面是一个简单的示例程序,演示如何使用 `mkfifo()` 函数创建一个命名管道: ```c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char *argv[]) { const char *fifo_file = "myfifo"; int ret; // 创建命名管道 ret = mkfifo(fifo_file, 0666); if (ret < 0) { perror("mkfifo"); exit(1); } // 打开命名管道进行读写操作 int fd = open(fifo_file, O_RDWR); if (fd < 0) { perror("open"); exit(1); } // 写入一条消息 const char *msg = "Hello, named pipe!\n"; write(fd, msg, strlen(msg)); // 关闭文件描述符 close(fd); // 删除文件 unlink(fifo_file); return 0; } ``` 在该示例程序中,我们首先使用 `mkfifo()` 函数创建了一个名为 `myfifo` 的命名管道,然后使用 `open()` 函数打开该文件进行写操作,写入一条消息后关闭文件描述符,最后使用 `unlink()` 函数删除该文件。

相关推荐

最新推荐

recommend-type

linux下系统调用write过程

在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使 用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面
recommend-type

linux内核4.7版本设备驱动介绍

linux内核4.7版本设备驱动介绍,包含如下模块:class、pci、platform、pinctrl、kset、kobject、bus、device、device_driver、i2c、tty、regmap、misc、spin_lock、inode、mutex、cdev、gpio_keys、usb
recommend-type

Linux操作系统实验三.doc

1、通过实验了解和熟悉Linux系统管理; 2、掌握用户和组管理命令; 3、掌握软件包安装命令和步骤; 4、掌握网络通信管理命令; 5、掌握进程管理命令; 6、掌握系统的服务管理命令; 7、掌握磁盘操作管理命令。 二、 开发...
recommend-type

python文件写入write()的操作

主要介绍了python文件写入write()的操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

linux常用的C函数open,write、read

对linux基本的C函数open、write、read的使用方法进行了描述
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。