我必须做一个使用unix环境的C程序。 我已经购买了“在Unix环境下推进编程”一书,到目前为止已经帮了大忙。 但是,我的一些问题没有得到答复,我正在寻求一些帮助。
我试图编写一个程序,可以validation是否有复制程序存在的第一个和第二个参数。 如果第一个参数不存在,则必须出现错误消息并退出。 如果第二个参数确实存在,则必须显示覆盖提示。 我不确定如何validation文件是否已经存在或基本不存在。
我看到有几个人说你可以做(!-e)或类似的东西来validation文件存在/不存在。
如果有人能帮助我,我会很感激。
如何调整dynamic加载的本机DLL的%PATH%?
将UTF-16转换为UTF-8
WinDBG适用于从Visual Studio 2015中保存的转储,但不是任务pipe理器。 显示exception代码“找不到”
如何在GCC中编译C程序以在WinDbg中启用debugging?
检索有关当前login会话的信息(Visual C ++,Win 7)
如何重新加载保存的“embedded源”剪贴板数据?
Shell脚本在linux下closures应用程序
access()函数旨在告诉您文件是否存在(或可读,可写或可执行文件)。
#include <unistd.h> int result; const char *filename = "/tmp/myfile"; result = access (filename,F_OK); // F_OK tests existence also (R_OK,W_OK,X_OK). // for readable,writeable,executable if ( result == 0 ) { printf("%s exists!!n",filename); } else { printf("ERROR: %s doesn't exist!n",filename); }
在你的int main(int argc,char** argv) { block。
if (argc == 3) { // then there were 3 arguments,the program name,and two parameters } else if (argc == 2) { // then prompt for the "second" argument,as the program name and one // parameter exists } else { // just print out the usage,as we have a non-handled number of arguments }
现在如果要验证文件是否存在,那么与验证程序参数是否存在不同。 基本上试图打开文件并从中读取,但要密切注意捕获整数错误代码并检查错误。 这将阻止你的程序进入那些关键操作被认为已经工作的位置。
在处理C文件时,新程序员之间有一个共同的但误导性的概念。基本上,人们确实希望确定一个特定的代码块(在你的情况下是复制块),所以他们检查,检查和加倍在块执行之前检查条件。 检查文件是否存在,检查它是否有正确的权限,检查它不是一个目录等。我的建议是,你不这样做。
您的复制块应该能够正确地失败,就像它应该能够成功一样。 如果失败,那么一般情况下,您将获得打印出有意义的错误信息所需的全部信息。 如果你先检查然后再行动,那么检查和行动之间总会有一个小的时间间隔,这个时间差距最终会在检查通过之后,在阅读之前被删除或改变。 在这种情况下,所有的预检代码都没有提供任何好处。
没有好处的代码只是未来错误和建筑问题的嵌套基础。 不要浪费你的时间编写可疑(或没有)好处的代码。 当你怀疑你写的代码没有什么好处的时候,你需要重构你的代码,把它放在正确的地方。 当你怀疑别人写的代码没什么好处的时候,你首先要怀疑你的怀疑。 看不到代码背后的动机是非常容易的,在刚开始使用新语言时更是如此。
祝你好运!
—代码为疲倦—
#include <errorno.h> #include <stdio.h> #include <stdlib.h> extern int errno; int main(int argc,char** argv) { // to hold our file descriptor FILE *fp; // reset any possible prevIoUsly captured errors errno = 0; // open the file for reading fp = fopen(argv[1],"r"); // check for an error condition if ( fp == 0 && errno != 0 ) { // print the error condition using the system error messages,with the // additional message "Error occurred while opening file" perror("Error occurred while opening file.n"); // terminate the program with a non-successful status exit(1); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。