[英]How to get user input in Unix C?
我正在尝试编写可在Unix环境中使用的程序。 但是,这是我第一次做这样的事情,我对某些事情感到困惑。 我的代码如下:
#include <unistd.h>
#include <stdio.h>
#define BUFFSIZE 4096
int main (int argc, char * argv[]){
int n;
char buf[BUFFSIZE];
if (argc != 2){
err_sys("usage a.out <pathname>");
}
if (access(argv[1], R_OK) == -1){
err_ret("access error for %s", argv[1]);
}
if (access(argv[2], R_OK) == 0){
printf("Would you like to overwrite (Y or N)? \n");
if(){
exit(0);
}
}
while ((n = read(STDIN_FILENO, buf, BUFFSIZE) > 0)){
if (write(STDOUT_FILENO, buf, n) != n){
err_sys("write error");
}
}
if (n < 0){
err_sys("read error");
}
close(STDOUT_FILENO);
close(STDIN_FILENO);
exit(0);
}
好的,基本上,我必须编写一个使用打开,读取,写入,关闭和访问的程序。 但是,如果第二个参数(即文件名)已经存在,那么我对如何实现必须提示用户覆盖的部分完全困惑。
再次这些代码行:
if (access(argv[2], R_OK) == 0){
printf("Would you like to overwrite (Y or N)? \n");
if(){
exit(0);
}
我不确定如何从用户那里获得响应以及情况如何。
另外,如果我的其他任何代码错误,请随时通知我,并让我知道如何进行改进。
谢谢!
刚刚添加:
if (open(argv[1], O_RDONLY) < 0){
err_ret("open error for %s", argv[1]);
}
要只读取一个char,可以调用getchar()(stdio.h)(也有scanf())。
样品:
c = getchar();
if(c == 'Y' || c == 'y'){ ... }
else if(c == 'N' || c == 'n'){ ... }
else { printf("Wrong option!") }
您可以使用getchar()或scanf()来获取用户输入。
使用fgets(3)或readline(3),它们足够通用,可以在许多不同的场景中使用。 避免使用scanf(3),因为它有问题,更多信息在这里
另外,请使用“ size_t n”而不是“ int n”。 通常,您可以只使用BUFSIZ,这是实现定义的值,可以在标头中轻松使用。 另外,为什么还要在退出时关闭stdin和stdout? 在您的程序中没有这样做的特定原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.