O_EXCL

本文详细解析了文件操作中的O_CREAT和O_EXCL标志。这两种标志用于在打开文件时创建新文件,并确保创建操作的原子性,避免多个进程同时创建同一个文件。文章通过示例展示了如何使用这些标志来实现文件的独占创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在open的时候常会使用O_CREAT | O_EXCL,比如:

mq_open("/anyone", O_RDWR | O_CREAT  | O_EXCL, 0666, &mqAttr);


O_CREAT:没有指定的文件会新建一个, 如果文件存在,使用存在文件;

O_CREAT| O_EXCL:如果存在指定文件,返回出错:errno == EEXIST;

应用场景:

1 当前进程必须自己创建一个新的文件,而不能使用已有的文件

2 类似进程有多个,无法判断哪个首先运行

这样可以实现判断文件存在与否并创建文件的原子操作;

对比于:

if(access(....) == -1) {

open(...O_RDWR | O_CREAT);

}

### 关于 `ALSM_EXCEL_TO_INTERNAL_TABLE` 的功能与使用 #### 功能概述 `ALSM_EXCEL_TO_INTERNAL_TABLE` 函数模块用于将 Excel 文件中的数据导入到 ABAP 内部表中。此函数可以读取不同版本的 Excel 文件(如 .xls 和 .xlsx),并提供参数控制具体的操作行为,比如选择特定的工作表。 #### 参数描述 该函数的主要输入输出参数如下: - **FILENAME (I)**: 指定要读取的 Excel 文件路径。 - **FILETYPE (I)**: 表明文件类型,通常为 'XLS' 或者 'XLSX'. - **WORKBOOK (O)**: 返回整个工作簿的内容作为内部表格形式的数据结构. - **BEGIN_OF_DATA (O)**: 数据起始位置标志位, 可选填. - **END_OF_DATA (O)**: 数据结束位置标志位, 可选填. 对于只读取某个特定 sheet 页面的需求,可以通过设置额外的参数来实现[^1]. #### 自定义封装实例 为了简化调用过程和增强灵活性,建议创建一个新的函数 ZCALSM_EXCEL_TO_INTERNAL_TABLE 来包裹原始接口,并增加必要的逻辑以满足业务需求: ```abap FUNCTION zcalsm_excel_to_internal_table . *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(FILENAME) TYPE STRING *" VALUE(SHEET_NAME) TYPE STRING OPTIONAL *" EXPORTING *" REFERENCE(ITAB) TYPE STANDARD TABLE OF STRING *"---------------------------------------------------------------------- DATA: ls_workbook TYPE alsmex_tab, lt_data TYPE alsmex_cells_tab, lv_sheet TYPE string. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = FILENAME filetype = 'XLSX' " 假设我们总是处理 XLSX 类型 IMPORTING workbook = ls_workbook EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. RETURN. ENDIF. lv_sheet = COND #( WHEN SHEET_NAME IS NOT INITIAL THEN SHEET_NAME ELSE ls_workbook-sheets ). READ TABLE ls_workbook-cells INTO lt_data WITH KEY sheet_name = lv_sheet BINARY SEARCH. LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<line>). APPEND <line>-cell TO ITAB. ENDLOOP. ENDFUNCTION. ``` 上述代码展示了如何通过自定义函数仅加载指定名称的工作表内容至内表中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值