如何用C语言open系统调用实现Shell的>>追加功能?代码返回-1
解决自定义Shell中>>追加文件时open返回-1的问题
你的代码里open调用失败的核心原因是:当目标文件不存在时,仅使用O_WRONLY | O_APPEND不会自动创建文件,同时使用O_CREAT时必须指定文件权限参数。
修改后的代码如下:
int filedesc = open(inputargs[limit-1], O_WRONLY | O_APPEND | O_CREAT, 0644); // printf("%s\n", inputargs[limit-1]); if (filedesc < 0) { perror("Error opening file"); // 用perror打印具体错误原因,方便排查 } else { dup2(filedesc, 1); }
关键修改点:
- 添加
O_CREAT标志:让open在文件不存在时自动创建它 - 补充第三个参数
0644:这是使用O_CREAT时必须指定的文件权限,代表所有者可读可写,组用户和其他用户只读(可根据需求调整)
另外,用perror替代printf输出错误信息,能显示具体的失败原因(比如权限不足、路径不存在等),更有助于排查问题。
内容的提问来源于stack exchange,提问作者Sreyash
相关产品推荐
相关产品推荐

