2
follwing代碼已經寫入,用於在Linux中使用sysyem調用來打開文件並將數據寫入終端。C(文件描述符)中的系統調用
要讀取文件描述符(fd)的值,應該指定一個值。正如我們在if else語句中所知道的那樣,如果其他部分或者第一部分將一次執行。所以根據下面的代碼fd只有在else時纔有一個值。但是當我傳遞文件名並運行該程序時,它會打開文件。文件打開發生在read(()系統調用的while循環中,但while循環處於其他部分,因爲文件描述符在理論上不能有任何值,所以read函數如何才能完全識別文件?這讓我感到困惑。
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 10
int main(int argc, char *argv[])
{
int fd,n;
char buff[SIZE];
if(argc != 2)
{
printf("USAGE : %s\n",argv[0]);
exit(1);
}
else if ((fd = open(argv[1],0)) == -1)
{
perror("STATUS");
exit(1);
}
else
{
while((n = read(fd,buff,SIZE)) > 0)
{
write(1,buff,SIZE);
}
close(fd);
}
}
'else if((fd = open(argv [1],0))== -1)''fd'具有從'open'返回的值。這就是C中的事情。學習如何使用調試器並逐步完成該程序,您就會明白。 –
函數:'read()'返回'ssize_t',而不是'int'。 – user3629249
當輸出一個錯誤信息時,它應該輸出到'stderr',而不是'stdout'。因此,建議您的錯誤消息類似於:'fprintf(stderr,「USAGE:%s \ n」,argv [0]);' – user3629249