Linux_1_文件——文件描述符

* 文件描述符

 -文件描述符是个很小的正整数,调试一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。
 -例如:每个进程启动时都打开3个文件:

* 标准输入文件 STDIN_FILENO  0
* 标准输出 STDOUT_FILENO  1
* 标准出错 STDERR_FILENO  2

 -这三个文件分别对应文件描述符0、1、2
 -编程中应该使用<unistd.h>中定义的STDIN_FILENO、STDOUT_FILENO、STDRR_FILENO代替数字0、1、2。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(void)
{
char buf[10];
memset(buf,0,sizeof(buf));
read(STDIN_FILENO,buf,sizeof(buf));//自己实现了scanf
printf("%s",buf);
return EXIT_SUCCESS;
}
* 给予文件描述符的I/O操作兼容POSIX标准,所以移植行比较好。
* 许多Linux、Unix系统都依赖于文件描述符。
* 尤其是TCP/IP操作只能通过文件描述符执行输入输出。
* 在Linux上几乎每样东西都是一个文件。
* 这样大量资源,比如内存,磁盘空间,进程间通信,声卡,鼠标都有了一个统一的编程接口。




* 使用文件描述符

    * 打卡和关闭文件描述符。
     #include<sys/types.h>
        #include<sys/stat.h>
        #include<fcntl.h>
        #include<unistd.h>
        int open(const char *pathname,int flags);
        int close(int fd);
* open试图打开参数pathname中的一个文件。
* 可在Linux的man命令中查看  man 3 open  3代表C语言函数
* 参数flags制定访问该文件的方式。
* 必须把flags设置为O_RDONLY、O_WRONLY、O_RDWR、O_CREAT、O_APPEND分别表示只读、只写、读写、如果文件不存在就创建、追加。
* open成功后会返回一个文件描述符。
* open失败后会返回-1,病设置errno变量。
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
char s[]="abc.txt";
int fd=open(s,O_RDONLY);
}
* open试图打开一个不存在的文件,返回-1
* 如果想知道更多详细的错误描述,请使用errno和strerror函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
int main(void)
{
char buf[]="abc.txt";
close(STDOUT_FILENO);//先关闭当前本窗口的标准输出,以便用其他窗口输出,默认是以当前窗口输出,用tty命令可以查看窗口文件
//int fd=open(buf,O_RDONLY);
int fd1=open("/dev/pts/1",O_WRONLY);//打开设备文件/dev/pts/1,该设备作为标准输出文件描述符
int fd=open(buf,O_RDONLY);
int i=0;
while(1)
{
sleep(1);
printf("%d      %d:::%d\n",fd,fd1,i++);//printf语句将会打印到/dev/pts/1上
}
//close(fd);
close(fd1);
return EXIT_SUCCESS;
}

这个程序让我知道在linux中,窗口也是一个文件,/dev/pts/1是一个窗口文件
这里写图片描述

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值